Search code examples
pythonmultiprocessingqueuetypeerror

Python multiprocessing : TypeError: 'Queue' object is not iterable


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?


Solution

  • 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()