Ez a cikk egy tükör gépi fordítás, kérjük, kattintson ide, hogy ugorjon az eredeti cikkre.

Nézet: 15907|Válasz: 2

[Forrás] Python3 párhuzamos hozzáférésű vízszintes partíciós táblázatokat valósít meg

[Linket másol]
Közzétéve 2017. 11. 29. 21:15:55 | | |
Forgatókönyv leírása

Tegyük fel, hogy van egy mysql tábla, amely vízszintesen szeletel, több gazdagépre szétszórva, mindegyikben n darabos tábla van.
Mit tegyek, ha egyszerre kell elérnem ezeket a táblákat, és gyorsan meg kell kapnom a lekérdezési eredményeket?
Íme egy megoldás ennek a követelménynek az asyncio asyncio könyvtárával és a python3 aiomysql aszinkron könyvtárával történő megvalósítására.

Kód bemutató

Import-naplózás
Véletlenszerű importálás
import asyncio
Az aiomysql importról create_pool

# Tegyük fel, hogy a mysql tábla 8 hostra van szétosztva, mindegyiknek 16 al-táblája van
TBLES = {
    "192.168.1.01": "table_000-015", #000-015 azt jelzi, hogy az IP szerinti inqilátor table_000-től table_015-ig folytonos
    "192.168.1.02": "table_016-031",
    "192.168.1.03": "table_032-047",
    "192.168.1.04": "table_048-063",
    "192.168.1.05": "table_064-079",
    "192.168.1.06": "table_080-095",
    "192.168.1.07": "table_096-0111",
    "192.168.1.08": "table_112-0127",
}
FELHASZNÁLÓ = "xxx"
PASSWD = "xxxx"

# burkolófüggvény kivételek elkapásához
def query_wrapper(func):
    async def wrapper(*args, **kwargs):
        Próbáld ki:
            Await func(*args, **kwargs)
        kivéve a kivételt, mint e:
            print(e)
    Visszaküldési csomagoló


# Az SQL hozzáféréskezelő funkció aszinkron, nem blokkoló kéréseket valósít meg az AIOMYSQL-en keresztül
@query_wrapper
Async def query_do_something(IP, db, table):
    aszinkron create_pool(host=ip, db=db, user=USER, password=PASSWD) mint pool:
        asszinkron a pool.get() segítségével, mint conn:
            asszinkron a conn.cursor() cur-val:
                SQL = ("Válassz xxx-et a {}-ből, ahol xxxx")
                Await cur.execute(SQL.format(table))
                res = várj cur.fetchall()
                # Akkor csinálj valamit...


# SQL hozzáférési sorba generálása, a sor minden eleme tartalmaz függvényeket és paramétereket egy táblázathoz való hozzáféréshez
def gen_tasks():
    feladatok = []
    IP-hez TBLES.items() adatbázisban:
        cols = re.split('_|-', tbls)
        tblpre = "_".join(cols[:-2])
        min_num = int(cols[-2])
        max_num = int(cols[-1])
        a num tartományban (min_num, max_num+1):
            tasks.append(
               (query_do_something, ip, 'your_dbname', '{}_{}'.format(tblpre, num))
            )

    random.shuffle(feladatok)
    Visszaküldési feladatok

# Futtatd az SQL hozzáférési kérelmek sorát csomagokban
def run_tasks(feladatok, batch_len):
    Próbáld ki:
        IDX esetén a tartomány(0, len(tasks), batch_len):
            batch_tasks = feladatok[idx:idx+batch_len]
            logging.info("aktuális tétel, start_idx:%s len:%s" % (idx, len(batch_tasks)))
            A tartományban (0, len(batch_tasks)):
                l = batch_tasks
                batch_tasks= asyncio.ensure_future(
                    l[0](*l[1:])
                )
            loop.run_until_complete(asyncio.gather(*batch_tasks))
    kivéve a kivételt, mint e:
        logging.warn(e)

# fő módszer, amely aszinkron függvényhívást valósít meg aszinkón keresztül
def main():
    loop = asyncio.get_event_loop()

    feladatok = gen_tasks()
    batch_len = len(TBLES.keys()) * 5 # minden rajtad múlik.
    run_tasks(feladatok, batch_len)

    loop.close()





Előző:Hogyan töltsünk fel.
Következő:A WebAPI testreszabja a visszaadó adatformátumot
Közzétéve 2017. 11. 30. 9:03:52 |
Jó srolling és táblaoptimalizálási adatbázis
Közzétéve 2018. 04. 04. 15:20:12 |
Mint
Lemondás:
A Code Farmer Network által közzétett összes szoftver, programozási anyag vagy cikk kizárólag tanulási és kutatási célokra szolgál; A fenti tartalmat nem szabad kereskedelmi vagy illegális célokra használni, különben a felhasználók viselik az összes következményet. Az oldalon található információk az internetről származnak, és a szerzői jogi vitáknak semmi köze ehhez az oldalhoz. A fenti tartalmat a letöltés után 24 órán belül teljesen törölni kell a számítógépéről. Ha tetszik a program, kérjük, támogassa a valódi szoftvert, vásároljon regisztrációt, és szerezzen jobb hiteles szolgáltatásokat. Ha bármilyen jogsértés történik, kérjük, vegye fel velünk a kapcsolatot e-mailben.

Mail To:help@itsvse.com