簡體   English   中英

Python - 無法並行運行多個查詢

[英]Python - Can't run multiple queries in parallel

我有一個接收多個連接的腳本(可以是 MySQL、MSSQL 等)並使用 Python 執行一些查詢。 通過使我的流程並行運行這些查詢,我取得了一些成就。 為此,我收到 dataframe 並根據列值運行這些查詢。 為此,我有以下代碼:

import pandas as pd
import multiprocessing
import util
import os
from itertools import product

df = pd.read_excel("myFile.xlsx", sheet_name = 'data')

conn, engine = #connections

def work(query):
    try:
        cursor.execute(query)
        result = cursor.rowcount
    except SyntaxError as e:
        result = -999
    return result

def run(df):
    results = []
    pool = multiprocessing.Pool(os.cpu_count())
    total_rows = pool.starmap(work, product(df["queries"]), chunksize=1)
    results.append(total_rows)
    pool.close()
    pool.join()

if __name__ == "__main__" :
    run(df)

但是當我運行我的代碼時,我收到以下錯誤:

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "dev.py", line 42, in <module>
    run(df)
  File "dev.py", line 34, in run
    total_rows = pool.starmap(work, product(df["dsc_test_query"]), chunksize=1)
  File "C:\AppData\Local\Programs\Python\Python38-32\lib\multiprocessing\pool.py", line 372, in starmap
    return self._map_async(func, iterable, starmapstar, chunksize).get()
  File "C:\AppData\Local\Programs\Python\Python38-32\lib\multiprocessing\pool.py", line 771, in get
    raise self._value
AttributeError: 'float' object has no attribute 'encode'

任何人都知道並行運行查詢列表的最佳選擇嗎?

謝謝!

result = cursor.rowcount

可能導致錯誤。 function 'work' 正在引發您正在觀察的屬性錯誤。 如果我用類似的東西替換工作 function

def work(url):
    raise Exception("some exception")
    result = -999
    return result

我可以觀察到類似的行為。 很可能您正在處理需要字符串的result

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM