线程安全性

libcurl thread safety documentation ,libcurl是线程安全的,但没有内部线程同步。

对于使用pycurl的python程序,这意味着:

  • 当这个对象不涉及活动传输时,从不同的线程访问同一个pycurl对象是可以的,因为python内部有一个全局解释器锁,一次只能有一个操作系统线程执行python代码。

  • 访问参与从python代码进行活动传输的pycurl对象 在所讨论的pycurl对象的libcurl回调中 可以,因为pycurl会取出适当的锁。

  • 访问参与从python代码进行活动传输的pycurl对象 在所讨论的pycurl对象的libcurl回调之外 是不安全的。

PycURL为OpenSSL/libresl/BoringSSL、GnuTLS、NSS、mbedTLS和wolfSSL处理必要的SSL锁。

当libcurl使用标准的C库名称解析器(即非线程或C-ares解析器)时,会出现一种特殊情况。默认情况下,libcurl使用信号来超时C库解析器,而信号在多线程程序中不能正常工作。使用来自多个Python线程的pycurl对象时 NOSIGNAL 选项 must be given .