Asynhronus,现实生活过程中的多线程仿真

时间:2018-08-28 11:38:00

标签: python multithreading timer

首先,我不是一个程序员,而是一个机械工程师,所以如果我误解或说些废话,请不要把我钉在十字架上。

我想编写一个python代码,女巫将“模拟”一个现实生活中的问题。现实生活中的问题是类似FIFO队列的问题,在该队列中,对象是从不同的工作站上提取的,它们在那里花费了一些时间,然后将它们返回到队列中。

我所需要的是编写一个异步Programm,因为我有一个Function将对象放入队列(每15秒说一次),然后有一些工作站仅从该队列中获取一个对象,然后再次处理了一段时间(一个简单的计时器,并显示“嗨,我正在处理对象x,它将在分钟内返回它”。

我不确定是否可以使用Threading吗?如果我有100个异步工作的工作站,可以启动100个线程怎么办?因为据我了解,每个线程都应该有一个计时器?

我想给我一点推动力,以最简单的方向来解决它,它不一定漂亮,但对我来说功能实用且容易。

预先感谢您的每个想法! 最好的祝福, MM。

1 个答案:

答案 0 :(得分:1)

当然,您可以使用Threading来同时运行多个进程。

您必须创建一个像这样的类:

from threading import Thread

class Work(Thread):

    def __init__(self):
        Thread.__init__(self)
        self.lock = threading.Lock()

    def run(self): # This function launch the thread
        (your code)

如果您想同时运行多个线程:

def foo():
    i = 0
    list = []
    while i < 10:
        list.append(Work())
        list[i].start() # Start call run() method of the class above.
        i += 1

如果要在多个线程中使用同一变量,请小心。您必须锁定此变量,以使它们不会同时全部到达此变量。像这样:

lock = threading.Lock()
lock.acquire()
try:
    yourVariable += 1 # When you call lock.acquire() without arguments, block all variables until the lock is unlocked (lock.release()).
finally:
    lock.release()

在主线程中,您可以在队列上调用join()以等待所有未完成的任务完成。

此方法的好处是您无需创建和销毁线程,这很昂贵。工作线程将连续运行,但是当队列中没有任何任务时,将使用零CPU时间进入睡眠状态。

希望它能对您有所帮助。