1

我使用了多处理,但我不知道该怎么做

逻辑:变量符号等于0,使用一个称为计时器计数20秒的函数,每秒检查符号是否等于1,然后它会打印一些东西并打破循环,同时使用一个称为等待的函数对于来自另一个库的输入,例如“discord”或“socket”,因此如果输入等于我的键,则将变量符号翻转为 1,这会影响第一个函数计时器

import multiprocessing
from time import sleep
sign = 0

def timer():
    for s in range(20):
        if sign == 1: # if the input is equal to the secret key then break the timer
            print("Yes!")
            break
        else:
            sleep(1) #if not then continue timing

def waiting():
    # maybe it waits for an input or a message from "discord or whatsapp"
    if message == "secret_key":
        sign = 1

p1 = multiprocessing.Process(target=timer)
p2 = multiprocessing.Process(target=waiting)
p1.start()
p2.start()
4

1 回答 1

2

我在上面的评论中提到了它,但这里是你如何使用事件

import time
import multiprocessing as mp

def timer(exit_event):
    for s in range(20):
        if exit_event.is_set():
            print("Yes!")
            break
        else:
            time.sleep(1) #if not then continue timing

def waiting(exit_event):
    # maybe it waits for an input or a message from "discord or whatsapp"
    time.sleep(5)
    exit_event.set()
    

if __name__ == '__main__':
    exit_event = mp.Event()
    p1 = mp.Process(target=timer, args=(exit_event,))
    p2 = mp.Process(target=waiting, args=(exit_event,))
    p1.start()
    p2.start()
    p1.join()
    p2.join()

然而,真正使用 an 的方法Eventwait()让它成为真的。无需睡眠循环。

def timer(exit_event):
    if exit_event.wait(timeout=20)
        # returns True if the event is True.  False if timed out
        print("Yes!")
于 2021-12-04T00:34:49.310 回答