Python-C api并发问题

Wil*_*ill 5 c python multithreading thread-safety python-c-api

我们正在开发一个小型c服务器应用程序 服务器应用程序执行一些数据处理并响应客户端.为了保持数据处理部分的可配置性和灵活性,我们决定使用脚本,并根据各种现成模块的可用性,我们决定使用Python.我们使用Python-C api在c和python之间发送/接收数据.

算法的工作原理如下: -

  1. 服务器从客户端接收一些数据,这些数据存储在c中创建的字典中.使用api函数PyDict_New()创建字典; 来自c.使用api函数PyDict_SetItemString()将输入存储为字典中的键值对;
  2. 接下来,我们执行python脚本PyRun_SimpleString(); 将脚本作为参数传递.该脚本使用c中创建的字典.请注意,我们使用PyImport_AddModule()方法创建在c中创建的字典,脚本可以访问该字典; 和PyModule_AddObject();
  3. 我们将脚本中的数据处理结果作为键值对存储在上面创建的相同字典中.然后,c代码可以在脚本执行后简单地访问结果变量(键值对).

这个问题 ,我们所面临的问题是从不同的客户端进来的并发请求的情况下.当多个请求来自不同的客户端时,我们倾向于对象引用计数异常.请注意,对于为用户提供的每个请求,我们仅为该用户创建一个独立的字典.为了克服这个问题,我们包含了对PyRun_SimpleString()的调用; 在PyEval_AcquireLock()中; 和PyEval_ReleaseLock();,但这样做导致脚本执行是一个阻塞调用.因此,如果脚本需要很长时间才能执行,那么所有其他用户也在等待响应.

能否请您提出最好的方法,或指出我们哪里出错了.请告诉我更多信息.

任何帮助/指导将不胜感激.

Jan*_*ila 1

也许您错过了此答案中提到的电话之一。