Tämä artikkeli on konekäännöksen peiliartikkeli, klikkaa tästä siirtyäksesi alkuperäiseen artikkeliin.

Näkymä: 15907|Vastaus: 2

[Lähde] Python3 toteuttaa samanaikaiset vaakasuorat osiointitaulukot

[Kopioi linkki]
Julkaistu 29.11.2017 21.15.55 | | |
Skenaarion kuvaus

Oletetaan, että on mysql-taulukko, joka on viipaloitu vaakasuunnassa, jakautuen useiden isäntien kesken, joista jokaisessa on n sirpaleista taulukkoa.
Mitä minun pitäisi tehdä, jos minun täytyy käyttää näitä taulukoita samanaikaisesti ja saada kyselytulokset nopeasti?
Tässä on ratkaisu tämän vaatimuksen toteuttamiseen käyttäen asyncio asyncio -kirjastoa ja python3:n aiomysql-asynkronista kirjastoa.

Koodin demo

Tuo lokkia
Tuontisatunnainen
tuo asyncio
Aiomysql:n tuonti create_pool

# Oletetaan, että mysql-taulukko on hajallaan kahdeksaan isäntään, joista jokaisessa on 16 alitaulukkoa
TBLES = {
    "192.168.1.01": "table_000-015", #000-015 osoittaa, että tämän IP:n alla oleva merkintä on jatkuva table_000:stä table_015
    "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",
}
KÄYTTÄJÄ = "xxx"
PASSWD = "xxxx"

# käärefunktio poikkeusten havaitsemiseksi
def query_wrapper(funktionaalinen):
    async def wrapper(*args, **kwargs):
        Kokeile:
            odota func(*args, **kwargs)
        paitsi poikkeus e:nä:
            print(e)
    Palautuskääre


# Varsinainen SQL-pääsyn hallintatoiminto toteuttaa asynkroniset, ei-estävät pyynnöt AIOMYSQL:n kautta
@query_wrapper
Async def query_do_something(IP, DB, Table):
    asynkronisoitu create_pool(host=ip, db=db, user=USER, password=PASSWD) kanssa:
        Async pool.get():n kanssa conn:na:
            async conn.cursor():n kanssa curina:
                sql = ("valitse xxx {} missä xxxx")
                await cur.execute(sql.format(table))
                res = odota cur.fetchall()
                # tee sitten jotain...


# Luo SQL-käyttöjono, jokainen jonon elementti sisältää funktioita ja parametreja taulun avaamiseen
def gen_tasks():
    tehtävät = []
    IP:lle, TBLES.items():
        cols = re.split('_|-', tbls)
        tblpre = "_".join(cols[:-2])
        min_num = int(cols[-2])
        max_num = int(cols[-1])
        Num alueella(min_num, max_num+1):
            tasks.append(
               (query_do_something, ip, 'your_dbname', '{}_{}'.format(tblpre, num))
            )

    random.shuffle(tehtävät)
    Palautustehtävät

# Suorita SQL-käyttöoikeuspyyntöjono erissä
def run_tasks(tehtävät, batch_len):
    Kokeile:
        IDX:lle alueella(0, len(tehtävät), batch_len):
            batch_tasks = tehtävät[idx:idx+batch_len]
            logging.info("nykyinen erä, start_idx:%s len:%s" % (idx, len(batch_tasks))))
            i:lle alueella(0, len(batch_tasks)):
                l = batch_tasks
                batch_tasks= asyncio.ensure_future(
                    l[0](*l[1:])
                )
            loop.run_until_complete(asyncio.gather(*batch_tasks))
    paitsi poikkeus e:nä:
        logging.warn(e)

# päämenetelmä, joka toteuttaa asynkronisen funktioiden kutsun asyncion kautta
def main():
    silmukka = asyncio.get_event_loop()

    tehtävät = gen_tasks()
    batch_len = len(TBLES.keys()) * 5 # kaikki sinun päätettävissäsi
    run_tasks(tehtävät, batch_len)

    loop.close()





Edellinen:Kuinka ladata akkuja.
Seuraava:WebAPI räätälöi palautusdatan muodon
Julkaistu 30.11.2017 9.03.52 |
Hyvä kelaus- ja taulukkooptimointitietokanta
Julkaistu 4.4.2018 15.20.12 |
Kuten
Vastuuvapauslauseke:
Kaikki Code Farmer Networkin julkaisemat ohjelmistot, ohjelmamateriaalit tai artikkelit ovat tarkoitettu vain oppimis- ja tutkimustarkoituksiin; Yllä mainittua sisältöä ei saa käyttää kaupallisiin tai laittomiin tarkoituksiin, muuten käyttäjät joutuvat kantamaan kaikki seuraukset. Tämän sivuston tiedot ovat peräisin internetistä, eikä tekijänoikeuskiistat liity tähän sivustoon. Sinun tulee poistaa yllä oleva sisältö kokonaan tietokoneeltasi 24 tunnin kuluessa lataamisesta. Jos pidät ohjelmasta, tue aitoa ohjelmistoa, osta rekisteröityminen ja hanki parempia aitoja palveluita. Jos rikkomuksia ilmenee, ota meihin yhteyttä sähköpostitse.

Mail To:help@itsvse.com