Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.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_Python 3.x_Multithreading_Python Multiprocessing - Fatal编程技术网

Python中的多处理:处理多个工作线程

Python中的多处理:处理多个工作线程,python,python-3.x,multithreading,python-multiprocessing,Python,Python 3.x,Multithreading,Python Multiprocessing,在我的代码中,我需要在python程序中运行多个工作线程实例。我最初创建了几个工作线程实例(比如10个),然后将它们添加到一个池中。每当客户机请求服务时,都应该调用线程并为客户机保留线程。完成任务后,线程应添加回池中 到目前为止,我已经编写了以下代码。但我不确定如何在池中永远运行线程(在池中时线程应该处于休眠状态),在需要时调用并获取服务,并在处理完后将其添加回池中(应该再次休眠)。任何帮助都将不胜感激 PRED = Queue(10) class Worker(threading.Threa

在我的代码中,我需要在python程序中运行多个工作线程实例。我最初创建了几个工作线程实例(比如10个),然后将它们添加到一个池中。每当客户机请求服务时,都应该调用线程并为客户机保留线程。完成任务后,线程应添加回池中

到目前为止,我已经编写了以下代码。但我不确定如何在池中永远运行线程(在池中时线程应该处于休眠状态),在需要时调用并获取服务,并在处理完后将其添加回池中(应该再次休眠)。任何帮助都将不胜感激

PRED = Queue(10)

class Worker(threading.Thread):
    def __init__(self, threadID, name):
        threading.Thread.__init__(self)
        self.threadID  =threadID
        self.name = name

    def run(self):
        print("starting " + self.name + " thread")
        while True:
            ??
        print("Exiting " + self.name + " thread")


def work():
    print("working")
    time.sleep(3)
  • 假设工作线程在PRED队列中
  • work()是我应该调用以服务于客户机的方法

使用任务队列向工作人员发送任务。让您的工作人员侦听任务队列,如果任务队列为空则等待。当工作人员从队列中获取任务时,它应该执行该任务,然后返回到轮询队列。相当标准的工人模式


当我说task时,我的意思是你可以在队列中放入一个实际的方法。工人可以拿起它并执行它

以下是我从Python文档中得到的一些东西

阅读更多:

确保您对它有很好的了解,有一些很酷的选项,比如创建优先级队列、先进先出或后进先出

import queue
import threading
import time


# The queue for tasks
q = queue.Queue()


# Worker, handles each task
def worker():
    while True:
        item = q.get()
        if item is None:
            break
        print("Working on", item)
        time.sleep(1)
        q.task_done()


def start_workers(worker_pool=1000):
    threads = []
    for i in range(worker_pool):
        t = threading.Thread(target=worker)
        t.start()
        threads.append(t)
    return threads


def stop_workers(threads):
    # stop workers
    for i in threads:
        q.put(None)
    for t in threads:
        t.join()


def create_queue(task_items):
    for item in task_items:
        q.put(item)


if __name__ == "__main__":
    # Dummy tasks
    tasks = [item for item in range(1000)]

    # Start up your workers
    workers = start_workers(worker_pool=10)
    create_queue(tasks)

    # Blocks until all tasks are complete
    q.join()

    stop_workers(workers)

是 啊这种模式还可以。但是你能提供一些关于如何归档的代码吗。我不清楚如何在《蟒蛇》中做听力部分,那太棒了。非常感谢。