Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 多处理卡在map函数上_Python_Python 3.x_Multithreading_Multiprocessing_Python Multiprocessing - Fatal编程技术网

Python 多处理卡在map函数上

Python 多处理卡在map函数上,python,python-3.x,multithreading,multiprocessing,python-multiprocessing,Python,Python 3.x,Multithreading,Multiprocessing,Python Multiprocessing,我目前正在使用分页方法发出一个http请求,该请求包含超过3000000条记录。有时,由于104服务器错误,调用失败,因此我重试,它在第二次或第三次工作 因为有太多的请求,所以我使用python中的多进程函数来加速这一过程。我使用的是ubuntu 16机器、python3.5和8核机器。奇怪的是,所有的文件都被写入,进程“完成”,即到达范围的末尾(不管大小是100万、200万还是300万),但它不会通过池线。所以我的tmux会话只是说“按日期工作(lastrecordnumber)”,我需要这样

我目前正在使用分页方法发出一个http请求,该请求包含超过3000000条记录。有时,由于104服务器错误,调用失败,因此我重试,它在第二次或第三次工作

因为有太多的请求,所以我使用python中的多进程函数来加速这一过程。我使用的是ubuntu 16机器、python3.5和8核机器。奇怪的是,所有的文件都被写入,进程“完成”,即到达范围的末尾(不管大小是100万、200万还是300万),但它不会通过池线。所以我的tmux会话只是说“按日期工作(lastrecordnumber)”,我需要这样做,这样我就可以发送电子邮件让我知道任务已经完成

我已经尝试了
pool.map()
pool.aysnc()
pool.map\u async()
,它们似乎都有相同的问题

导入http.client
来自多处理导入池
从functools导入部分
def获取原始数据(身份验证、url连接、跳过):
头文件={'authorization':“Basic{}”.format(auth)}
成功=无
循环=0
虽然不成功:
尝试:
conn=http.client.HTTPSConnection(url\u conn)
conn.request(“GET”,“SOME_API&$skip={}”。格式(skip),headers=headers)
res=conn.getresponse()
data=res.read()
raw_data=json.load(data.decode(“utf-8”))
成功=‘是’
例外情况除外,如e:
打印('卡在循环中{}{}'。格式(跳过,循环,e))
循环+=1
以open({}.json'.格式(跳过),'w')作为输出文件:
json.dump(原始数据,输出文件)
def过程_跳过(跳过):
打印('在日期{}上工作'。格式(跳过))
获取原始数据(跳过)
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
print(“我们从{}.format(dt.datetime.now())开始)
n=范围(035973515000)
n=列表(n)
游泳池=游泳池(8)
map\u异步(进程跳过,n)
pool.close()
pool.join()

使用池作为上下文管理器,使用
关闭/加入流程,这似乎是文档中的首选方法

如果uuuu name_uuuu=='\uuuuuuu main\uuuuuu':
print(“我们从{}.format(dt.datetime.now())开始)
n=列表(范围(035973515000))
将池(8)作为池:
map\u异步(进程跳过,n)

如果您的主流程正常工作并正确写入文件,则应能使您的流程正确结束。

使用池作为上下文管理器,使用
,它负责关闭/加入流程,似乎是文档中的首选方法

如果uuuu name_uuuu=='\uuuuuuu main\uuuuuu':
print(“我们从{}.format(dt.datetime.now())开始)
n=列表(范围(035973515000))
将池(8)作为池:
map\u异步(进程跳过,n)

如果主进程正常工作并正确写入文件,则应能使进程正确结束。

因此,池正常运行,映射正常,因为进程结束,但池永远不会关闭?从单独的进程打印
不一定安全。如果需要日志记录,则需要一个带有日志记录队列的单独进程。请检查代码的格式。不使用标准(我相信是PEP8)格式会使其他人很难阅读,而且,缩进有错误,这只是一个Python错误。也就是说,难道你不能简单地模拟web请求,这样你就可以得到一个实际的结果吗?这样池就可以正常运行,映射也可以工作,因为进程结束了,但池永远不会关闭。从一个单独的进程打印
不一定是安全的。如果需要日志记录,则需要一个带有日志记录队列的单独进程。请检查代码的格式。不使用标准(我相信是PEP8)格式会使其他人很难阅读,而且,缩进有错误,这只是一个Python错误。也就是说,你不能简单地模拟web请求,这样你就可以得到一个实际的结果吗?