Mac OS上的redis队列:进程已分叉,您无法安全地使用此CoreFoundation功能



我有一个django应用程序,它使用rq队列。我的设置在Ubuntu上运行良好,但我的队列不会处理macos(Catalina(上的任何作业。

基本上,我的django应用程序使用python manage.py runserver运行我用python3 manage.py rqworker default运行我的队列

一旦我将作业发送到队列,我就会收到以下消息(每个作业一个这样的块(:

07:10:41 default: djpager.jobs.pager.generate_source(331) (f799a0ae-1500-4483-a1ce-818995c93bed)
The process has forked and you cannot use this CoreFoundation functionality safely. You MUST exec().
Break on __THE_PROCESS_HAS_FORKED_AND_YOU_CANNOT_USE_THIS_COREFOUNDATION_FUNCTIONALITY___YOU_MUST_EXEC__() to debug.
objc[26643]: +[NSNumber initialize] may have been in progress in another thread when fork() was called.
objc[26643]: +[NSNumber initialize] may have been in progress in another thread when fork() was called. We cannot safely call it or ignore it in the fork() child process. Crashing instead. Set a breakpoint on objc_initializeAfterForkError to debug.
07:10:41 Moving job to FailedJobRegistry (work-horse terminated unexpectedly; waitpid returned 6)

在谷歌上搜索,我发现的唯一建议就是执行这个命令:

export OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES

这使得错误消息略短,但仍然没有运行作业:

07:23:26 default: djpager.jobs.pager.generate_source(362) (33fd1d39-5bc4-49b9-a1ee-c5fb0218fe95)
The process has forked and you cannot use this CoreFoundation functionality safely. You MUST exec().
Break on __THE_PROCESS_HAS_FORKED_AND_YOU_CANNOT_USE_THIS_COREFOUNDATION_FUNCTIONALITY___YOU_MUST_EXEC__() to debug.
07:23:26 Moving job to FailedJobRegistry (work-horse terminated unexpectedly; waitpid returned 11)

关于如何在macos上实现这一点,有什么建议吗?

我在macOS Catalina 10.15.4和Python 3.8.3上也遇到了这个问题,代码在Ubuntu 18.04.4上运行得很好。此处记录了该问题。

我通过在if __name__ == '__main__':中放入有问题的调用来解决此问题。

在操作系统更新后面临同样的问题。

根据这个github问题,用sudo启动worker暂时解决了这个问题。

最新更新