python flask RuntimeError: fork not supported for subinterpreters

作者分享了如何将原本单核服务器的应用迁移到拥有8核CPU的本地电脑,以利用多CPU并行处理加快任务执行。遇到RuntimeError:forknotsupportedforsubinterpreters问题后,通过调整Apache2的WSGI配置解决了冲突,确保了应用在多线程环境下的正常运行。
摘要由CSDN通过智能技术生成

        自己有个网页应用,因为之前云服务器一直是1核,所以没有对任务进行分割,但是最近自己购买了8核心16线程cpu的电脑,将该应用跑在本地电脑,就需要充分利用电脑的多cpu并行处理,以便加速任务的执行了。

    大概框架是下面这样的:

        

@app.route('/api/post', methods=['POST'])
def post():
    ............................ 不相关代码,省略
    test_func()
    ............................ 不相关代码,省略

def test_func()
    ............................ 不相关代码,省略

    manager = Manager()
    g_statistics_info = manager.list()
    lock = manager.Lock()
    proc_list = []
    for part_args in np.array_split(args, multiprocessing.cpu_count()):
        p = multiprocessing.Process(target=task_func, args=(part_args, g_statistics_info, lock))
        proc_list.append(p)
    [p.start() for p in proc_list]
    [p.join() for p in proc_list]
    
    ............................. 不相关代码,省略

     当我用service apache2 restart后,执行网页,触发test_func()动作后,apache2 错误日志提示: RuntimeError: fork not supported for subinterpreters

        

        解决方案:

        修改 /etc/apache2/sites-available/ 下面对应的配置文件为如下:

<IfModule mod_ssl.c>

        WSGIRestrictSignal Off

        <VirtualHost _default_:443>
            ............................ 不相关代码,省略

            WSGIApplicationGroup %{GLOBAL}

            ............................ 不相关代码,省略
        </VirtualHost>
</IfModule>        

即需要按照上面格式,添加 WSGIRestrictSignal Off  和 WSGIApplicationGroup %{GLOBAL}

再运行,就正常了。

  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值