簡體   English   中英

收到TypeError:無法腌制_thread.lock對象

[英]Getting TypeError: can't pickle _thread.lock objects

我正在查詢MongoDB以獲取字典列表,並且對於列表中的每個字典,我正在對值進行一些比較。 基於比較的結果,我將存儲字典的值,比較結果以及在mongoDB集合中計算出的其他值。 我正在嘗試通過調用多處理來做到這一點,並收到此錯誤。

def save_for_doc(doc_id):

    #function to get the fields of doc
    fields = get_fields(doc_id)
    no_of_process = 5
    doc_col_size = 30000
    chunk_size = round(doc_col_size/no_of_process)
    chunk_ranges = range(0, no_of_process*chunk_size, chunk_size)
    processes = [ multiprocessing.Process(target=save_similar_docs, args= 
    (doc_id,client,fields,chunks,chunk_size)) for chunks in chunk_ranges]
    for prc in processes:
       prc.start()

def save_similar_docs(arguments):

     #This function process the args and saves the results to MongoDB. Does not 
     #return anything as the end result is directly stored.

下面是錯誤:

 File "H:/Desktop/Performance Improvement/With_Process_Pool.py", line 144, 
 in save_for_doc
   prc.start()

 File "C:\ProgramData\Anaconda3\lib\multiprocessing\process.py", line 105, 
 in start
  self._popen = self._Popen(self)

 File "C:\ProgramData\Anaconda3\lib\multiprocessing\context.py", line 223, 
 in _Popen
   return _default_context.get_context().Process._Popen(process_obj)

 File "C:\ProgramData\Anaconda3\lib\multiprocessing\context.py", line 322, 
 in _Popen
   return Popen(process_obj)

 File "C:\ProgramData\Anaconda3\lib\multiprocessing\popen_spawn_win32.py", 
 line 65, in __init__
reduction.dump(process_obj, to_child)

 File "C:\ProgramData\Anaconda3\lib\multiprocessing\reduction.py", line 60, 
 in dump
        ForkingPickler(file, protocol).dump(obj)

        TypeError: can't pickle _thread.lock objects

這個錯誤是什么意思? 請解釋一下,我該如何克服。

該文檔說,您不能將客戶端從主進程復制到子進程,必須在分叉后創建連接。 派生該過程之后,無法復制客戶端對象,請創建連接。

在Unix系統上,多處理模塊使用fork()生成進程。 將MongoClient實例與fork()配合使用時必須小心。 特別是,絕不能將MongoClient實例從父進程復制到子進程。 相反,父進程和每個子進程必須創建自己的MongoClient實例。

http://api.mongodb.com/python/current/faq.html#id21

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM