简体   繁体   English

使用 Queue() 进行多处理:TypeError: can't pickle _thread.lock objects

[英]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.

相关问题 Cassandra多处理无法腌制_thread.lock对象 - Cassandra multiprocessing can't pickle _thread.lock objects 在将Queue传递给子进程中的线程时,如何解决“ TypeError:无法腌制_thread.lock对象” - How to fix 'TypeError: can't pickle _thread.lock objects' when passing a Queue to a thread in a child process 多处理,Python3,Windows:TypeError:无法腌制 _thread.lock 对象 - Multiprocessing, Python3, Windows: TypeError: can't pickle _thread.lock objects Joblib错误:TypeError:无法腌制_thread.lock对象 - Joblib error: TypeError: can't pickle _thread.lock objects Keras:TypeError:无法使用KerasClassifier来pickle _thread.lock对象 - Keras: TypeError: can't pickle _thread.lock objects with KerasClassifier Keras 2,TypeError:无法pickle _thread.lock对象 - Keras 2, TypeError: can't pickle _thread.lock objects Keras模型:TypeError:无法腌制_thread.lock对象 - Keras model: TypeError: can't pickle _thread.lock objects 收到TypeError:无法腌制_thread.lock对象 - Getting TypeError: can't pickle _thread.lock objects Python多处理,无法腌制thread.lock(pymongo) - Python multiprocessing, can't pickle thread.lock (pymongo) Keras Lambda图层和变量:“TypeError:无法pickle _thread.lock对象” - Keras Lambda layer and variables : “TypeError: can't pickle _thread.lock objects”
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM