欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件高级功能研发区 → context对象在Cython下的传递

   

欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。    


  共有3030人关注过本帖树形打印复制链接

主题:context对象在Cython下的传递

帅哥哟,离线,有人找我吗?
滚雪球
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:520 积分:0 威望:0 精华:0 注册:2013/10/20 14:07:21
context对象在Cython下的传递  发帖心情 Post By:2020/5/29 10:52:16 [只看该作者]

因为各种原因需要将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
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:21598 积分:0 威望:0 精华:1 注册:2010/7/31 16:35:30
  发帖心情 Post By:2020/5/29 13:55:59 [只看该作者]

不用传参数,context是一个全局对象你直接全局共享就行了

 回到顶部
帅哥哟,离线,有人找我吗?
滚雪球
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:520 积分:0 威望:0 精华:0 注册:2013/10/20 14:07:21
  发帖心情 Post By: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

 



 回到顶部
帅哥哟,离线,有人找我吗?
滚雪球
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:520 积分:0 威望:0 精华:0 注册:2013/10/20 14:07:21
  发帖心情 Post By:2020/5/29 20:39:13 [只看该作者]


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

 回到顶部
帅哥哟,离线,有人找我吗?
yukizzc
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:21598 积分:0 威望:0 精华:1 注册:2010/7/31 16:35:30
  发帖心情 Post By: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)

 

 

 

 

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


 回到顶部
帅哥哟,离线,有人找我吗?
滚雪球
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:520 积分:0 威望:0 精华:0 注册:2013/10/20 14:07:21
  发帖心情 Post By:2020/6/1 19:52:43 [只看该作者]

 

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

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

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

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

 回到顶部
帅哥哟,离线,有人找我吗?
滚雪球
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:520 积分:0 威望:0 精华:0 注册:2013/10/20 14:07:21
  发帖心情 Post By:2020/6/8 13:03:16 [只看该作者]



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

 回到顶部