Программа состоит из трех частей: добавление данных в очереди, обработка данных в очередях и проверка, пуста ли очередь. Каждый, кроме Add (), все части имеют свой собственный процесс. Программа должна функционировать так, когда мы ее запускаем,
Он должен продолжать проверять очереди, если что-то в нем запускает функцию, если не продолжать работу.
В то же время асинхронные данные могут быть добавлены в очередь, и она должна выполнить задание, как указано ранее
Одновременно из очереди может обрабатываться только одна вещь.
Я использую Windows, и я продолжаю получать
TypeError: can't pickle _thread.lock objects
Вот код
from multiprocessing import Queue,Process
from time import sleep
import threading
from multiprocessing.pool import ThreadPool
from multiprocessing import dummy as multithreading
import concurrent.futures
# import queue
class A(object):
def __init__(self, *args, **kwargs):
self.Q = Queue()
#Add data to queue: should be accessable all time
def Add(self, i):
# q = Queue()
self.Q.put(threading.Thread(target=self.printAns(i)))
#Processes the data: runs only upon call
def printAns(self,name):
print("Name to print is: ",name)
return 'completed'
#This function call printANS as a process
def jobRun(self):
# job = self.Q.get()
# ans = Queue()
jobThread = self.Q.get()
async_result = jRPool.apply_async(jobThread)
print(async_result.get())
#Checks if the queue has anything: checker functions needs to run constantly
def checkQueue(self):
while True:
if self.Q.empty():
pass
else:
return True
#should initiate call to checker upon success calls jobRun() as a process and go back to checking
def run(self):
with concurrent.futures.ProcessPoolExecutor() as executor:
checkfunc = executor.map(self.checkQueue)
while True:
if checkfunc:
sleep(1)
executor.map(self.jobRun)
self.Q.close()
if __name__ == '__main__':
a = A()
a.Add("test1")
a.Add("test2")
a.run()
# a.Add("this")
while True:
data = input("Enter a string: ")
a.Add(data)
Любая помощь очень ценится. Я догадываюсь, что это связано с замками или семафорами.