Python-C api并发问题

标签 python c multithreading thread-safety python-c-api

我们正在开发一个小型 C 服务器应用程序。服务器应用程序进行一些数据处理并响应客户端。为了保持数据处理部分的可配置性和灵 active ,我们决定使用脚本,并且基于各种现成模块的可用性,我们决定使用 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();,但这样做会导致脚本执行成为阻塞调用。因此,如果脚本执行时间过长,所有其他用户也在等待响应。

能否请您提出最佳方法或指出我们出错的地方。请 ping 我以获取更多信息。

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

最佳答案

也许您错过了 this answer 中提到的调用之一.

关于Python-C api并发问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9175940/

相关文章:

python - python中的颜色数组

java - 为什么实时系统是并发的?

java - ProcessBuilder 持有生成进程的锁

android - 多个 IntentServices 并行运行

python - 如何在Python中使用Url进行计数

python - 将订单号与字母字符和数字的组合相匹配?

python - 连接错误 : A connection attempt failed because the connected party did not properly respond after a period of time

c - 从 sqlite 表中的行中删除重复元素

c - C 中的二项式系数

objective-c - Malloc 的字符串包含垃圾值