python 多线程应用_多线程中使用Python

importwin.ui;/*DSG{{*/varwinform = win.form(text="aardio - 后台线程运行Python";right=1163;bottom=753)

winform.add(

button={cls="button";text="调用python线程";left=876;top=663;right=1102;bottom=723;z=2};

edit={cls="edit";left=11;top=16;right=1140;bottom=625;edge=1;multiline=1;z=1}

)/*}}*//*

其实Python并不支持真正的多线程,

Pyhton的多线程GIL管理也不方便,处理不好就会崩溃、死锁。

所以更好的方式是在单线程中运行python,

如果在界面线程中,python需要做耗时操作,

那么可以使用工作线程运行python,下面是一个演示:

*///python服务端线程pyServerThread =function(winform){importthread.command;importpy;//创建命令监听器varcmd = thread.command();//响应事件cmd.pyHash =function(){//可以直接访问界面控件winform.edit.print("子线程正在执行pyHash函数",tostring(time()))varhashlib = py.import("hashlib");varmd5 = hashlib.md5()

md5.update( raw.buffer("注意这个函数的参数不是字符串而是字节数组(相当于aardio中的buffer)") );sleep(1000)//调用界面线的函数winform.pyHashEnd(tostring(md5.hexdigest()) );returntostring(md5.hexdigest());

}//退出线程cmd.pyExit =function(){

win.quitMessage();

}//在工作线程需要启用消息循环,才能响应事件win.loopMessage();

}//启动python服务端线程thread.create( pyServerThread,winform )//增加工作线程可以调用的函数winform.pyHashEnd =function(str){

winform.edit.print("主线程收到:",str)

}importthread.command;

winform.button.oncommand =function(id,event){//禁用按钮,避免重复提交winform.button.disabledText ="正在调用python线程";//异步调用python线程的函数,不等待返回thread.command.post("pyHash")//异步调用python线程的函数,等待返回值varstr = thread.command.sendInvoke("pyHash")

winform.edit.print("主线程收到:",str)//取消按钮禁用状态winform.button.disabledText =null;

}

winform.onClose =function(hwnd,message,wParam,lParam){//退出Python线程thread.command.pyExit()

}

winform.show()

win.loopMessage();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值