我有两个函数同时在两个线程上运行。这两个函数都调用这个方法PyObject_CallObject(pFunc,pArgs)
来执行两个不同的python函数。但当我尝试这样做时,我得到了access violation reading location
异常。在两个函数中使用的pFunc
和pArgs
都是本地函数,并且没有共享数据。还是我如何得到异常?如何同时在两个不同的线程中执行PyObject_CallObject()?
2
A
回答
2
这是不可能的。您需要在调用任何Python CAPI函数之前获取全局解释器锁(GIL)。只有几个函数可以在没有GIL的情况下调用。
https://docs.python.org/2/c-api/init.html#thread-state-and-the-global-interpreter-lock
Python解释器不是完全线程安全的。为了支持多线程的Python程序,有一个全局锁,称为全局解释器锁或GIL,必须在当前线程可以安全地访问Python对象之前保留它。没有锁定,即使是最简单的操作也可能导致多线程程序出现问题:例如,当两个线程同时递增同一对象的引用计数时,引用计数可能最终只会增加一次而不是两次。
相关问题
- 1. 与不同的睡眠时间同时运行两个线程
- 2. 如何在不同线程中同时运行多个QDialog?
- 3. 如何让两个线程执行两个不同的循环或方法?
- 4. 如何在python中同时运行两个线程?
- 5. 如何在java中同时运行两个线程
- 6. 如何在目标C中同时运行两个多线程?
- 7. 如何在Event dispatch线程中同时运行两个组件?
- 8. 在两个线程中同时中止()
- 9. 如何让不同的OpenMP线程执行不同的任务
- 10. 执行多个线程同时
- 11. c#同时执行2个线程
- 12. 如何在不同的线程中运行监听器或在不同的线程中执行计算
- 13. 执行两个程序同时
- 14. 同时执行两个同步方法
- 15. 在不同的线程执行回调
- 16. 如何让不同的线程在CUDA中执行不同的部分?
- 17. Swift - 如何在同一函数中为两个不同的SKNode同时运行两个动作(线性模式)
- 18. 如何从python中同时执行两个程序?
- 19. 如何在Android中执行两个线程时运行第三个线程
- 20. 如何在同一时间运行两个线程? Qt C++
- 21. 在不同的处理器中并行执行两个程序
- 22. 在Mysql中执行两个查询时不同的表行数
- 23. 如何在不同的线程中执行QTcpSocket?
- 24. 如何同时运行两个或多个线程
- 25. 如何同时在不同线程的对象中运行一个方法?
- 26. 的Python - 线程 - 同时执行
- 27. 如何在线程中放置两个不同的任务
- 28. 如何在Postgresql中同时执行两个事务?
- 29. 如何在python中同时执行两个循环?
- 30. 如何在页面中同时执行两个更新面板?