साझा कतार के साथ एक ही समय में दो अलग-अलग फ़ंक्शंस चलाने की कोशिश कर रहा है और एक त्रुटि प्राप्त नहीं कर सकता ... मैं साझा कतार के साथ एक ही समय में दो फ़ंक्शन कैसे चला सकता हूं? यह विंडोज पर पायथन संस्करण 3.6 है 7.TypeError: _thread.lock ऑब्जेक्ट्स
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
'queue.Queue' इंटर-थ्रेड संचार के लिए है। 'multiprocessing.Queue' प्रक्रियाओं के बीच चीजें भेजने के लिए है। – user2357112
@ user2357112 मैंने 'multiprocessing.Queue' में परिवर्तन किया और इस मुद्दे को ठीक किया। धन्यवाद। –