以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  高级功能研发区  (http://weistock.com/bbs/list.asp?boardid=5)
----  context对象在Cython下的传递  (http://weistock.com/bbs/dispbbs.asp?boardid=5&id=176328)

--  作者:滚雪球
--  发布时间:2020/5/29 10:52:16
--  context对象在Cython下的传递
因为各种原因需要将python代码用Cython编译后运行,如果直接使用def handle_bar(context)是可以正常运行的
但现在需要用settimer来自己控制,实际运行的程序是def run(context),如果不编译也是正常的,但是编译以后
settimer(run,1000)这句代码无法带入context参数,报一个错误,说是要求是str的类型,但实际上是context类型
有什么办法解决这个问题
代码如下:
def exit(context):
    killtimer(run)
   
def init(context):
    settimer(run,1000)
def handle_bar(context):
    pass           
def run(context):
    ......


--  作者:yukizzc
--  发布时间:2020/5/29 13:55:59
--  
不用传参数,context是一个全局对象你直接全局共享就行了
--  作者:滚雪球
--  发布时间:2020/5/29 20:19:12
--  

问题在于settimer和killtimer要求函数必须有context参数,但是带参数编译过后的pyd又报类型不对
Argument \'context\' has incorrect type (expected str, got context)
我在想是否能够指定一下context这个参数的类型?

settimer 设定计时器—定时触发

函数原型

settimer (funciton, msec)

设定计时器—定时触发,仅"paper_trading"模式有效

注意:function函数一定要包含(并且只能包含)context

 



--  作者:滚雪球
--  发布时间:2020/5/29 20:39:13
--  

还有一个办法就是自己写一个死循环,这样可以运行,但是退出的时候怎么结束这个进程?
def init(context):
    while True:
        run(context)
        time.sleep(1)

--  作者:yukizzc
--  发布时间:2020/6/1 9:35:33
--  

import time
def init(context):
    # 设置计时器
    settimer(msg,10)

def msg(context):
    #输出现在时间
    a = time.asctime( time.localtime(time.time()) )
    print(a)
#退出程序后杀死计时器
def exit(context):
    killtimer(msg)

 

 

 

 

不是很明白范例里这个不是可以的吗?退出时候杀死计时器


--  作者:滚雪球
--  发布时间:2020/6/1 19:52:43
--  

 

如果不用Cython编译的话是没有问题的,但是编译后的pyd就不能运行了

总是报参数类型不对的错误

你可以用Cython编译一下示范代码再试试

[此贴子已经被作者于2020/6/1 19:54:12编辑过]

--  作者:滚雪球
--  发布时间:2020/6/8 13:03:16
--  


找到原因了,是我自己的问题,指定数据类型的时候出错了