python - 现实生活过程的异步、多线程模拟

标签 python multithreading timer

首先我必须提一下,我不是程序员,而是机械工程师,所以如果我误解了某些内容或说了一些废话,请不要钉死我。

我想编写一个Python代码来“模拟”现实生活中的问题。现实生活中的问题类似于 FIFO 队列,其中对象从不同的站获取,并在那里花费一些时间,然后返回到队列。

我知道我需要的是编写一个异步程序,因为我有一个函数将对象放入队列(假设每 15 秒一次),然后我有一些站只从该队列中取出一个对象,然后再次处理它一段时间(简单的计时器和打印“嗨,我正在处理对象 x,将在:分钟内返回它”。

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

我会要求给我一点插入,以最简单的方向来解决它,它不一定要漂亮,但对我来说实用且简单。

提前感谢您的每一个想法! 此致, 毫米。

最佳答案

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

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

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 时间。

希望对你有帮助。

关于python - 现实生活过程的异步、多线程模拟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52056924/

相关文章:

python - Azure blob存储目录下载(win,python)

javascript - 如何将元素更改为显示计时器的 Id

MATLAB : running a function in a COM server without blocking matlab?

python - 预测类别或类别概率?

python - 主机命令和 ifconfig 给出不同的 ips

javascript - 在javascript中创建这种类型的数据结构

c++ - C++中的多线程效率

java - 进程 'javaw' 占用 CPU 使用率 95% 以上

multithreading - OCaml 中的线程延迟和键盘事件

c - Arduino Due Sam3X8E 访问定时器值