[英]Multiprocessing with Queue(): TypeError: can't pickle _thread.lock objects
This is my code:这是我的代码:
def search(page, sort, start, end, q):
print(mp.current_process())
results = req.request_buff_market_page(page, sort, start, end)
for i in results:
if(i[1] >= 20 and 'Souvenir' not in i[0]):
q.put(i)
if __name__ == '__main__':
page = 1
q = queue.Queue()
with mp.Pool(processes=mp.cpu_count()) as pool:
print(page)
pool.starmap(search, (page, 'asc', 200, 205, q))
page += 1
while not(q.empty()):
print(q.get())
Output: Output:
Traceback (most recent call last):
File "C:\Users\Andrew\Desktop\ultralight\mp_buff.py", line 33, in <module>
pool.starmap(search, (page, 'asc', 200, 205, q))
.........
TypeError: can't pickle _thread.lock objects
I'm not sure what is causing this error.我不确定是什么导致了这个错误。 The error occurs on this line:
错误发生在这一行:
pool.starmap(search, (page, 'asc', 200, 205, q))
pool.starmap(搜索, (page, 'asc', 200, 205, q))
EDIT: Changed my code to use multiprocessing.Process()编辑:更改我的代码以使用 multiprocessing.Process()
for i in range(mp.cpu_count()):
workers.append(mp.Process(target=search, args=(page, 'asc', 200, 230, q_search)))
page += 1
for i in workers: i.start()
for i in workers: i.join()
You are treating your multiprocessing pool as a multithreading pool, which is not the same thing.您将多处理池视为多线程池,这不是一回事。 Look into
multiprocessing.pool.ThreadPool
.查看
multiprocessing.pool.ThreadPool
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.