Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 具有可供所有线程使用的全局队列(或列表)_Python_Multithreading - Fatal编程技术网

Python 具有可供所有线程使用的全局队列(或列表)

Python 具有可供所有线程使用的全局队列(或列表),python,multithreading,Python,Multithreading,我想写一个脚本,它通过internet使用数据,并将每隔n秒拉入的数据放入队列/列表中,然后我将有x个线程,我将在脚本开始时创建这些线程,当数据添加到队列中时,这些线程将拾取并处理数据。我的问题是: 如何在脚本中创建这样一个全局变量(列表/队列),然后所有线程都可以访问它 在我的线程中,我计划检查队列中是否有数据,如果有,则检索该数据,释放锁并开始处理它。线程完成任务后,返回开始并继续检查队列。如果队列中没有数据,请休眠指定的时间,然后再次检查队列 您可以定义一个线程并将其传递给多个线程: fr

我想写一个脚本,它通过internet使用数据,并将每隔n秒拉入的数据放入队列/列表中,然后我将有x个线程,我将在脚本开始时创建这些线程,当数据添加到队列中时,这些线程将拾取并处理数据。我的问题是:

  • 如何在脚本中创建这样一个全局变量(列表/队列),然后所有线程都可以访问它
  • 在我的线程中,我计划检查队列中是否有数据,如果有,则检索该数据,释放锁并开始处理它。线程完成任务后,返回开始并继续检查队列。如果队列中没有数据,请休眠指定的时间,然后再次检查队列 您可以定义一个线程并将其传递给多个线程:

    from threading import Thread
    from Queue import Queue
    
    def task(queue):
        while True:
            item = queue.get()  # blocks until an item is available
            # process item
    
    queue = Queue()
    t = Thread(target=task, args=(queue, ))
    t.daemon = True
    t.start()
    

    如果你希望你的应用程序真的是多线程的,那么考虑使用独立队列(比如ActuMeq或ZrOMQ),并将它从你在不同OS进程中运行的脚本中消耗掉,因为吉尔(使用独立队列很容易在网络中使用它——加上可伸缩性)。p> 这正是它的用途:“队列模块实现了多生产者、多消费者队列。当信息必须在多个线程之间安全交换时,它在线程编程中特别有用。”