我正在使用python Tornado 运行非阻塞函数,应如何将params传递给main函数?

from __future__ import print_function
from tornado import ioloop, gen
import tornado_mysql
import time

@gen.coroutine
def main(index):
    conn = yield tornado_mysql.connect(host=db_host, port=3306, user=db_user, passwd=db_psw, db=db_db)
    cur = conn.cursor()
    sql = 'INSERT INTO `ctp_db`.`if1506` (`bid`) VALUES (%s)'
    yield cur.execute(sql, (index))
    conn.commit()
    cur.close()
    conn.close()

ioloop.IOLoop.current().run_sync(main)

最佳答案

方法IOLoop.run_sync()接受对函数的引用并尝试调用它。

因此,如果要使用指定的参数运行非阻塞函数,则应将其与另一个函数包装在一起。

您可以使用其他功能执行此操作,以下两个示例均正确:

def run_with_args(func, *args):
    return func(*args)

ioloop.IOLoop.current().run_sync(run_with_args(main, index))
lambda的较短方法:
ioloop.IOLoop.current().run_sync(lambda: main(index))

关于python - 如何将参数传递给python Tornado IOLoop run_sync(main)函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30782113/

10-12 21:30