[解決済み] TypeError: _thread.lockオブジェクトをpickleできません。
2022-02-01 09:58:35
質問
共有キューで2つの異なる関数を同時に実行しようとするとエラーが出ます...どうすれば共有キューで2つの関数を同時に実行できますか?Windows7上のPythonバージョン3.6です。
from multiprocessing import Process
from queue import Queue
import logging
def main():
x = DataGenerator()
try:
x.run()
except Exception as e:
logging.exception("message")
class DataGenerator:
def __init__(self):
logging.basicConfig(filename='testing.log', level=logging.INFO)
def run(self):
logging.info("Running Generator")
queue = Queue()
Process(target=self.package, args=(queue,)).start()
logging.info("Process started to generate data")
Process(target=self.send, args=(queue,)).start()
logging.info("Process started to send data.")
def package(self, queue):
while True:
for i in range(16):
datagram = bytearray()
datagram.append(i)
queue.put(datagram)
def send(self, queue):
byte_array = bytearray()
while True:
size_of__queue = queue.qsize()
logging.info(" queue size %s", size_of_queue)
if size_of_queue > 7:
for i in range(1, 8):
packet = queue.get()
byte_array.append(packet)
logging.info("Sending datagram ")
print(str(datagram))
byte_array(0)
if __name__ == "__main__":
main()
ログによると、エラーが発生しているようです。管理者としてコンソールを実行してみましたが、同じメッセージが表示されました...。
INFO:root:Running Generator
ERROR:root:message
Traceback (most recent call last):
File "test.py", line 8, in main
x.run()
File "test.py", line 20, in run
Process(target=self.package, args=(queue,)).start()
File "C:\ProgramData\Miniconda3\lib\multiprocessing\process.py", line 105, in start
self._popen = self._Popen(self)
File "C:\ProgramData\Miniconda3\lib\multiprocessing\context.py", line 223, in _Popen
return _default_context.get_context().Process._Popen(process_obj)
File "C:\ProgramData\Miniconda3\lib\multiprocessing\context.py", line 322, in _Popen
return Popen(process_obj)
File "C:\ProgramData\Miniconda3\lib\multiprocessing\popen_spawn_win32.py", line 65, in __init__
reduction.dump(process_obj, to_child)
File "C:\ProgramData\Miniconda3\lib\multiprocessing\reduction.py", line 60, in dump
ForkingPickler(file, protocol).dump(obj)
TypeError: can't pickle _thread.lock objects
解決方法は?
multiprocessing.Pool - PicklingError: type 'thread.lock'> をピクルスにできない: 属性検索 thread.lock に失敗しました。
キューを関数の引数としてではなく、selfに移動させます。
package
と
send
関連
-
[解決済み] Process finished with exit code 1」とはどういう意味ですか?
-
[解決済み] シンタックスエラーと変数アノテーションのターゲットが不正であるというエラーが発生します。どうすれば直せますか?[クローズド]
-
[解決済み] TypeError: _thread.lockオブジェクトをpickleできません。
-
[解決済み] ValueError: pysparkを使用してsparkで複数のSparkContextsを同時に実行できません。
-
[解決済み] TypeError: append() に 1 つの必須位置引数がない: 'values'
-
[解決済み] python3 UnicodeEncodeError: 'charmap' コーデックは位置 95-98 の文字をエンコードできない: 文字は <undefined> にマップされる。
-
[解決済み] python3 で cv2 をインポートするには?
-
[解決済み] python3のdateutil.parserの代わりとなるものは何ですか?
-
[解決済み] テキストファイルに辞書を書き込む?
-
[解決済み] Jupyterノートブックで別ディレクトリのpyファイルをインポートする
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】 AttributeError: 'module' オブジェクトには 'urlretrieve' という属性がありません。
-
[解決済み] シンタックスエラーと変数アノテーションのターゲットが不正であるというエラーが発生します。どうすれば直せますか?[クローズド]
-
[解決済み] 2次元リストを行と列で印刷する
-
[解決済み] jupyter notebook` 実行時のエラー (No such file or directory)
-
[解決済み] ImportError: Missing optional dependency 'S3Fs'. S3Fsパッケージは、S3ファイルを処理するために必要です。S3Fsをインストールするには、pipまたはcondaを使用してください。
-
[解決済み] ImportError: libcublas.so.9.0: 共有オブジェクトファイルを開くことができない
-
[解決済み] 'python3' は内部または外部のコマンド、操作可能なプログラムまたはバッチファイルとして認識されません。
-
[解決済み] python3のdateutil.parserの代わりとなるものは何ですか?
-
[解決済み] スクレイピングで何が間違っているのでしょうか。私のコードのために値を返さない
-
[解決済み] Jupyterノートブックで別ディレクトリのpyファイルをインポートする