I am doing a simple python app using multiprocessing and a Queue
between processes. I managed to make it work all right yesterday; however, without changing a thing, it doesn't work this morning, and it's blowing my mind.
My main.py
looks like this:
if __name__ == '__main__':
processes = []
data_queue = Queue()
processes.append(mp.Process(target=discord_commands))
processes.append(mp.Process(target=create_shop_list,args=(data_queue)))
processes.append(mp.Process(target=run,args=(data_queue)))
for process in processes:
process.start()
for process in processes:
process.join()
and the error is:
Traceback (most recent call last):
File "D:\aa_projet\erozia bot\eroziabot\Discord Erozia Bot\main.py", line 16, in <module>
processes.append(mp.Process(target=create_shop_list,args=(data_queue)))
File "C:\Users\barth\AppData\Local\Programs\Python\Python310\lib\multiprocessing\process.py", line 91, in __init__
self._args = tuple(args)
TypeError: 'Queue' object is not iterable
I however do not iter the queue in any way. On the target "run", there is only a queue.put(<some-json-data>).
On the create_shop_list
, I simply use a queue.get()
as following:
if not data_queue.empty():
data = data_queue.get()
Do you have any ideas on how to solve this?
As per my observation you need to corrects args=(data_queue,) this line
if __name__ == '__main__':
processes = []
data_queue = Queue()
processes.append(mp.Process(target=discord_commands))
processes.append(mp.Process(target=create_shop_list,args=(data_queue, )))
processes.append(mp.Process(target=run,args=(data_queue, )))
for process in processes:
process.start()
for process in processes:
process.join()