运行 python 如何同步运行?

How to run python functions synchronously?

我一直在为 Python 构建一个 twitch 聊天机器人,它有一些我添加的自定义游戏,供观众在观看我的流时使用。我目前的目标是制作一个骰子决斗游戏(2 人游戏,获得最高数字的人将赢得所下赌注的总和)。为了玩,我希望两个玩家在允许比赛继续之前接受比赛,但我也想实现一个比赛计时器,这样如果另一个用户在计时器到期前不接受比赛,它将取消比赛.我想为每个游戏创建一个新线程并扫描以查看游戏是否已过期,但需要它们与聊天机器人的其余部分并行 运行,否则我一次只能玩 1 个游戏时间,当它发生时,机器人的其余部分将逐渐停止。

我已经尝试过的是使用 Python 中包含的多线程模块创建两个进程并启动它们。我也试过使用线程模块,它提供了相同的结果。这是我为使其工作而编写的多线程代码。

processes = []
# Tick has a basic print statement, and a sleep statement for testing.
# Tried without the sleep, and used a for loop to print "test" 100 times as well to see if the sleep was causing the issue
tickprocess = multiprocessing.Process(target=tick()) 
processes.append(tickprocess)

# Main initializes settings and starts the chatbot
chatbotprocess = multiprocessing.Process(target=main()) 
processes.append(chatbotprocess)

for item in processes:
    item.start()

它的作用是启动 tick 进程,但它会在启动聊天机器人进程之前等待它完成,这与我想做的相反,因为我可以只调用 tick 函数,然后调用 main函数以获得相同的结果。我是否误解了这些模块的用途?最终目标是在收到骰子命令时启动一个游戏线程,但仍然允许机器人同步工作并处理其他命令和游戏(所有游戏到这一点 运行 立即或足够接近立即发生冲突不是问题)。

tick()main() 是函数调用。所以实际上你调用函数tick,得到它的结果(大概是None),然后将该结果传递给multiprocessing.Process().

您想要的是将 tick(以及后来的 main)函数传递给 multiprocessing.Process():

tickprocess = multiprocessing.Process(target=tick)

如果你仔细查看文档(https://docs.python.org/3.4/library/multiprocessing.html?highlight=process#the-process-class),它就在第一个示例中:

from multiprocessing import Process

def f(name):
    print('hello', name)

if __name__ == '__main__':
    p = Process(target=f, args=('bob',))  # <------ target=f, not target=f()
    p.start()
    p.join()