Bootstrap

【Python】定时器

一、周期性定时器

def timer(fq1, fq2, fq3):
    i = int(time.time() * 1000)
    fq1.put(i)
    fq2.put(i)
    fq3.put(i)
    threading.Timer(2, timer, args=(fq1, fq2, fq3,)).start()

如上,参数解释如下:
2:定时周期
timer:周期性调用自己
args:参数

二、例子

import threading
import multiprocessing
import time

# 定时器周期性对进程间共享的队列进行写操作

def process2(fq1):
    while True:
        if not fq1.empty():
            # print(time.time(), "进程2 wait")
            print(time.time() * 1000, "进程2 get:", fq1.get())


def process3(fq2):
    while True:
        if not fq2.empty():
            # print(time.time(), "进程3 wait")
            print(time.time() * 1000, "进程3 get:", fq2.get())


def process4(fq3):
    while True:
        if not fq3.empty():
            # print(time.time(), "进程4 wait")
            print(time.time() * 1000, "进程4 get:", fq3.get())


# 定时器,自己调自己
def timer(fq1, fq2, fq3):
    i = int(time.time() * 1000)
    fq1.put(i)
    fq2.put(i)
    fq3.put(i)
    threading.Timer(2, timer, args=(fq1, fq2, fq3,)).start()


if __name__ == '__main__':
    fq1 = multiprocessing.Queue()
    fq2 = multiprocessing.Queue()
    fq3 = multiprocessing.Queue()

    # 创建进程对象
    p2 = multiprocessing.Process(target=process2, args=(fq1,))
    p3 = multiprocessing.Process(target=process3, args=(fq2,))
    p4 = multiprocessing.Process(target=process4, args=(fq3,))

    # 启动进程
    p2.start()
    p3.start()
    p4.start()
    timer(fq1, fq2, fq3)

    # # 等待进程结束
    p2.join()
    p3.join()
    p4.join()

;