# 调用百度翻译api时在请求参数中设置过timeout,但还是出现过假死状态。
# 于是想写个自定义的timeout,来控制请求的进程。
# demo版本,先简单实现进程对进程的控制。后续再完善。
from multiprocessing import Process, Queue
import os
import time
def process_ctrl(q_, timeout=0):
print("启动超时控制模块")
pid = q_.get(True)
if timeout != 0:
time.sleep(timeout)
os.kill(pid, 2) # 设置1时主进程也被kill.需注意:kill() takes no keyword arguments
print("任务超时,已成功终止")
def request(q_):
pid = os.getpid()
q_.put(pid)
print("请求开始")
time.sleep(10) # 模仿api请求时超时设置
print("请求成功")
if __name__ == '__main__':
print("主进程开始")
q = Queue()
process = [Process(target=process_ctrl, args=(q, 2)),
Process(target=request, args=(q, ))]
[p.start() for p in process]
[p.join() for p in process]
print("主进程运行结束")
运行结果截图