易截截图软件、单文件、免安装、纯绿色、仅160KB

Boost Python的多线程问题

      因为工作中一个项目需要在运行过程中支持可以随时修改和便于管理的运行流程和配置参数管理,所以决定使用嵌入Python的方式实现,但是项目是多线程的,所以需要确定Boost Python的多线程支持程度,做了一些尝试。
1、Boost Python不支持多线程:
     使用Boost ThreadPool简化多线程环境,尝试如下:
void Pytest1()
{
Py_Initialize();
PyRun_SimpleString("from time import time,ctime\n"
       "print 'Today is',ctime(time())\n");
Py_Finalize();
}
void do_task()
{
for (int i = 0; i < 10; ++i)
{
Pytest1();
}
boost::xtime xt;
boost::xtime_get(&xt, boost::TIME_UTC); // initialize xt with current time
xt.sec += 1; // change xt to next second
boost::thread::sleep(xt); // do sleep
}
void Pytest3()
{
pool tp(5);
Py_Initialize();
// Add some tasks to the pool.
for (int i = 0 ; i <= 5; ++i)
{
tp.schedule(&do_task);
}
// Wait until all tasks are finished.
tp.wait();
Py_Finalize();
}
 
 
程序运行失败,报运行异常信息,看来直接在多线程中使用Boost Python不行。
2、在多线程中采用锁保护,实现Python运行环境的多线程串行化运行:
     尝试如下:
boost::mutex m_io_monitor;
 
void do_task()
{
for (int i = 0; i < 10; ++i)
{
{
boost::mutex::scoped_lock lock(m_io_monitor);
PyRun_SimpleString("from time import time,ctime\nprint 'Today is',ctime(time())\n");
}
boost::xtime xt;
boost::xtime_get(&xt, boost::TIME_UTC); // initialize xt with current time
xt.sec += 1; // change xt to next second
boost::thread::sleep(xt); // do sleep
}
}
void Pytest3()
{
pool tp(5);
Py_Initialize();
// Add some tasks to the pool.
for (int i = 0 ; i <= 5; ++i)
{
tp.schedule(&do_task);
}
// Wait until all tasks are finished.
tp.wait();
Py_Finalize();
}
 
运行完全正常。
 
3、在多线程中采用锁保护,实现Python调用脚本的多线程串行化运行:
boost::mutex m_io_monitor;
void do_task()
{
f


相关文档:

Python中的OS模块

os模块提供了多数操作系统的功能接口函数.当os模块被导入后,它会自适应于不同的操作系统平台,如posix或NT系统平台,os模块会根据不同的平台进行相应的操作.本节内容将对os模块提供的函数进行详细的解读.
1.1 文件操作函数
1.1.1 open()函数提供创建、打开、修改文件的功能。
Example 1-1. Using the os Module to Rename ......

Python三目运算,and or陷阱

在C语言中,三目运算经常用到(cond?a:b),非常的简洁,而在Python中不支持这种语法。
但是,可以用Python中and or来实现(这里是有陷阱的,下面会讲到)
我们来看下面几个表达式
>>> False
or 1
1
>>> False
or 0
0
>>> True or
0
True
>>> True
and 1
1
>> ......

关于Python正则表达式的区分大小写的问题

最近在用Python处理一些数据,数据需要存储到MySQL数据库中,采用MySQLdb来进行数据库的操作,但是被一个问题困扰了很久。在打开数据库的时候MySQLdb.connect(self.host, self.user, self.password, self.database, port=self.port)出异常,而且异常出现的位置非常奇怪。
出现在converters.py 164行
from decimal import ......

使用C语言扩展Python(四)

上一篇里的LAME项目已经展示了python如何与C语言交互,但程序仍不够理想,在python这一端仅仅是传递源文件和目标文件的路径,再调用C模块的encode方法来进行编码,但问题在于你无法控制encode函数,比如你想编码的源文件如果不是原始数据,而是wav文件或者其他格式呢?对于这个问题,有两种方法可以选择,一种模仿前面的C模 ......

话说Python(七)从Go...ogle说起

今天一上课,大牛老师就给大家出了一道题:
编程:请从字符串“goOoOogle”中找出以“O”开头,并以“O”结束的部分。
“这还不简单,看我的”小菜不一会儿就给出了答案:
>>> s="goOoOogle"
>>> s.find("O")
2
>>> s.find("O",3)
4
>>& ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号