python异步线程/进程

时间:2014-06-12 11:20:51

标签: python multithreading asynchronous

我必须用三个线程来进行一些事件模拟。

  1. 此线程定期生成“ticks”(它没有其他功能)
  2. 这个线程生成“任务”(我用来描述一组函数的抽象)。任务生成率由分布
  3. 指导
  4. 这个线程生成“worker”(谁接收2生成的任务并进行一些处理)。工人生成率由不同的分布指导
  5. 每次打勾,线程2& 3应检查它们是否清醒,如果它们是,则处理完成,否则,处理在其睡眠时间结束时开始。

    我在我的代码中使用了某种形式的睡眠,但没有完全按照我的需要给出结果。

    在每个刻度线上,我这样做:

    def run(self):    
            while True:
                task = Task().create()
                self.numTasks += 1            
                task_wait_time = Random.poisson(<value read off a config>)
                time.sleep(task_wait_time)
                worker = Worker().create()
                self.numWorkers += 1
                worker_wait_time = Random.poisson(<different value read  off a config>)
    

    但是很明显,事情是不对的。任务等待,然后工人等待。 可以发生并行等待,或并行任务和工作者生成。

    我确实读过有关线程模块的信息,但是还没有能够使用它完成所有3个工作。在网上的一些例子之后,我想出了一个不使用“tick”而另外两个的线程版本。我还没有测试它。

    我不清楚如何做这项工作,请指导我。

1 个答案:

答案 0 :(得分:0)

您需要将任务链接到工作人员。 为此,您可以使用队列,其方法为put和get。请参阅:https://docs.python.org/2/library/queue.html#module-Queue

或者使用事件对象及其方法设置并等待。看到: https://docs.python.org/2/library/threading.html#event-objects

此处缺少的部分是创建任务的“调度程序”与工作者之间的信息交换。