【发布时间】:2020-06-06 07:09:21
【问题描述】:
这是我的代码:
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())
输出:
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
我不确定是什么导致了这个错误。错误发生在这一行:
pool.starmap(search, (page, 'asc', 200, 205, q))
编辑:将我的代码更改为使用 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()
【问题讨论】:
-
您不能将
queue.Queue与multiprocessing一起使用。请改用multiprocessing.Queue。 -
@dano 谢谢,我在发布这个问题后意识到这一点。
标签: python multiprocessing python-multiprocessing