使用python同期期货提交过程编号

2024-10-02 10:18:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试使用Python3迭代多进程查询到网站。我使用了https://docs.python.org/3/library/concurrent.futures.html示例17.4.2.1中的示例代码的修改版本。ThreadPoolExecutor示例

    with concurrent.futures.ProcessPoolExecutor(max_workers=self.load) as executor:
        futureThreadVer = {executor.submit(self.get_code(), 60):x for x in range(self.load)}
        for future in concurrent.futures.as_completed(futureThreadVer):
            threadVer = futureThreadVer[future]
            try:
                data=future.result()
            except Exception as exc:
                print("%r generated an exception : %s" %(threadVer, exc))
            else:
                print("%r page data %r" % (self.page, data))

它是对https://docs.python.org/3/library/concurrent.futures.html示例17.4.2.1中示例代码的修改。ThreadPoolExecutor示例

我不想映射到线程到url,而是希望附加一个进程号,因为我在不同的进程中查询相同的url。在

我得到以下错误:

^{pr2}$

Tags: 代码httpsorgself示例docsdata进程
1条回答
网友
1楼 · 发布于 2024-10-02 10:18:15

在你的第二行:

futureThreadVer = {executor.submit(self.get_code(), 60):x for x in range(self.load)}

executor.submit的调用包含一个函数调用。它应该是对函数的引用。因此,所发生的不是在执行器内部调用函数,而是在主线程中调用函数,self.get_code可能返回一个实际传递给执行器的整数。然后,执行器试图调用该整数,认为它是一个函数。发生这种情况是因为python支持duck类型,而executor期望第一个参数是函数对象。在

所以把第二行改成:

futureThreadVer = {executor.submit(self.get_code, 60):x for x in range(self.load)}

相关问题 更多 >

    热门问题