[英]Python Running multiple processes simultaneously
我希望这不是重复的,但是我知道我已经很接近解决这个问题了,我只是不太了解最后一点。
我在Python中同时运行两个函数时遇到了这个问题。 我需要运行“ top”(Linux命令)以及并行执行每个新命令。 这是一个例子。
我正在尝试的一个快速的不和谐机器人:
import subprocess
import discord
@client.event #Event listener
def on_message(message):
if message.content.startswith('top'):
subprocess.call(['top'])
现在,此代码片段将执行我想要的操作,将其称为top的子进程并使其运行。 问题是我不能以相同的方式运行另一个子进程。 如果我添加以下代码:
@client.event #Event listener
def on_message(message):
if message.content.startswith('top'):
subprocess.call(['top'])
if message.content.startswith('kill top')
subprocess.call('killall', 'top')
这是一个简单的示例,但是对于需要保持运行状态的任何程序都是一样的。
在启动top之后运行第二个命令的任何尝试,都会使bot崩溃,并且我无法检索错误消息。 我的想法是要么是我不曾看到的不和谐库中的设计,要么我不确定以何种方式合并多线程,尽管我不确定最好的起点。
asyncio
有一个处理异步子流程的asyncio
。 您可能会使用此库,因为您正在使用discord.py
,因此我建议您使用它。
参考: https : //docs.python.org/3/library/asyncio-subprocess.html
@client.event
def on_message(message):
if message.content.startswith('top'):
proc = await asyncio.create_subprocess_shell(
'top',
stdout=asyncio.subprocess.PIPE
stderr=asyncio.subprocess.PIPE)
stdout, stderr = await proc.communicate()
if message.content.startswith('kill top'):
proc = await asyncio.create_subprocess_shell(
'killall top',
stdout=asyncio.subprocess.PIPE
stderr=asyncio.subprocess.PIPE)
stdout, stderr = await proc.communicate()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.