Python 停止rq worker不会';不能停止底层ffmpeg进程

Python 停止rq worker不会';不能停止底层ffmpeg进程,python,flask,ffmpeg,redis,python-rq,Python,Flask,Ffmpeg,Redis,Python Rq,我对python和rq相当陌生,已经到了一个我自己无法解决的地步 我正在使用ffmpeg python对livestreams进行编码,它在rq workers中分发,并使用flask显示在web应用程序上,但由于livestreams可以永远持续下去,因此我需要某种方法在它仍在执行时停止此过程。打开rq工作人员正在执行任务的终端,然后按“q”(ffmpeg快捷键退出),并将作业标记为OK,但我需要能够从我的web应用程序执行此操作 我尝试获取工作者ID并发送一个SIGKILL,这会停止工作者,

我对python和rq相当陌生,已经到了一个我自己无法解决的地步

我正在使用ffmpeg python对livestreams进行编码,它在rq workers中分发,并使用flask显示在web应用程序上,但由于livestreams可以永远持续下去,因此我需要某种方法在它仍在执行时停止此过程。打开rq工作人员正在执行任务的终端,然后按“q”(ffmpeg快捷键退出),并将作业标记为OK,但我需要能够从我的web应用程序执行此操作

我尝试获取工作者ID并发送一个SIGKILL,这会停止工作者,但任务仍在运行,这是我完全不理解的。这就好像实际的ffmpeg进程正在其他地方执行,停止工作进程并没有停止ffmpeg。请注意,我没有使用ffmpeg.run_async,我使用的是在我有限的知识范围内不应该异步执行的ffmpeg.run_async。在对流进行编码时,工作进程被标记为忙碌,并正确分配了作业ID,因此我真的不明白为什么在工作进程被终止时,底层进程仍在执行

如果不是发送SIGKILL,而是发送SIGTERM,那么工作人员说它正在等待一个热退出,并且永远不会关闭,因为ffmpeg进程仍然在做它的事情

我的一个想法是尝试向工作人员发送一个“q”键(尽管我做了一些研究,但我不知道如何做),或者尝试从rq切换到芹菜,这应该支持取消正在执行的任务

这是我的文件

@app.route('/streamings', methods=['GET', 'POST'])
@login_required
def streamings():
...
    if form2.submit_stop.data and form2.validate():
        conn1 = Redis.from_url('redis://')
        queue = rq.Queue('tasks-q', connection=Redis.from_url('redis://'))
        workers = rq.Worker.all(queue=queue)

        for worker in workers:
            peine = worker.get_current_job_id()
            if peine == form2.fld1.data:
                os.kill(worker.pid, signal.SIGKILL)
这是我的任务文件

def restream(origin, server, stream_key):
    stream_server = generate_url(server, stream_key)
    try:
        stream_map = None
        stream1 = ffmpeg.input(get_manifest(origin), re=None)
        stream2 = ffmpeg.input('mosca_66.png')
        stream_ol = ffmpeg.overlay(stream1, stream2, x='main_w-overlay_w-50', y='50')
        a1 = stream1.audio
        stream = ffmpeg.output(stream_ol, a1, stream_server, format='flv', vcodec='libx264', acodec='aac', preset='medium', g='120', crf='23', maxrate='4M', bufsize='5M', channel_layout='stereo')
        print(stream.get_args())
        ffmpeg.run(stream)
    except:
        set_complete() 
如果您对可能的解决方案有任何见解,我们将不胜感激

谢谢