简体   繁体   English

使用 concurrent.futures 时引发 TypeError

[英]TypeError raised when using concurrent.futures

I am trying to use concurrent.futures.ThreadPoolExecutor to optimize some exiting code, but the program actually goes wrong.我正在尝试使用 concurrent.futures.ThreadPoolExecutor 来优化一些现有代码,但程序实际上出错了。

def main():
dataDB = DataStorage.DataStorage("127.0.0.1", 27017)

data_catch_info = {}
data_catch_info["tempName"] = "catch_data_demo"
data_catch_info["lgURL"] = []
data_catch_info["author"] = "corporate slave"

url_pool = LookingURLPool.LgPool()

thread_pool = ThreadPoolExecutor(max_workers=2)

with DataProducer.DataProducer() as dp:
    tasks = []
    for url in url_pool.lg_pool("template1"):
        # thread_func(url,url_pool,dataDB,dp,data_catch_info)
        tasks.append(thread_pool.submit(thread_func,(url,url_pool,dataDB,dp,data_catch_info)))
    print(wait(tasks))

del thread_pool
del url_pool
del dataDB

It finally print:它最终打印:

DoneAndNotDoneFutures(done={<Future at 0x1978ae6e040 state=finished raised TypeError>, <Future at 0x1978aeb8d90 state=finished raised TypeError>, ...<Future at 0x1978ae79fd0 state=finished raised TypeError>, <Future at 0x1978aeceb50 state=finished raised TypeError>}, not_done=set()) DoneAndNotDoneFutures(done={<Future at 0x1978ae6e040 state=finished raise TypeError>, <Future at 0x1978aeb8d90 state=finished raise TypeError>, ...<Future at 0x1978ae79fd0 state=finished Future raise TypeError>, <Future at 0x1978ae79fd0 state=finished Future raise TypeError>, <Future at 0x1978aeb8d90 >}, not_done=set())

Can anyone explain what's going wrong?谁能解释一下出了什么问题?

Now everything is OK!现在一切正常!

Just change tasks.append(thread_pool.submit(thread_func,(url,url_pool,dataDB,dp,data_catch_info))) as tasks.append(thread_pool.submit(thread_func,(url),(url_pool),(dataDB),(dp),(data_catch_info)))只需将tasks.append(thread_pool.submit(thread_func,(url,url_pool,dataDB,dp,data_catch_info))) tasks.append(thread_pool.submit(thread_func,(url),(url_pool),(dataDB),(dp),(data_catch_info)))tasks.append(thread_pool.submit(thread_func,(url),(url_pool),(dataDB),(dp),(data_catch_info)))

When submit a func requiring not only params, we are expected to divide params into different ().当提交一个不仅需要 params 的 func 时,我们期望将 params 划分为不同的 ()。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM