【问题标题】:Run python code for specific time在特定时间运行 python 代码
【发布时间】:2017-05-03 19:32:02
【问题描述】:

我有以下代码:

def gen_stream():
    stream  = twitter.STREAMING_API(key=1, payload={})
    for tweet in stream.run():
        yield tweet
def pipeline():
    for tweet in gen_stream():
        tweet_id=tweet.get('id')
        print(tweet_id)
if __name__ == '__main__':
    pipeline()

我怎样才能只运行 1 分钟的代码。 我试过使用

if __name__ == '__main__':
    endtime=time.time()+60*1
    while time.time()<endtime:
        pipeline()

但是这段代码在结束时间之后不断产生推文 ID。如何在指定时间内运行pipeline

P.S gen_stream() 工作正常。

【问题讨论】:

  • 时间控制逻辑需要在 pipeline() 方法本身中。

标签: python twitter-oauth twitter-streaming-api


【解决方案1】:

您必须在单独的线程或进程中生成管道并从外部终止它。很好的是使用 pub sub 模式并很好地断开与流的连接。

将参数传递给管道,但它不会很好地关闭连接。

【讨论】:

    【解决方案2】:

    问题是代码进入pipeline函数并在里面永远循环。

    pipeline 接受endtime 参数

    def gen_stream():
        stream  = twitter.STREAMING_API(key=1, payload={})
        for tweet in stream.run():
            yield tweet
    
    def pipeline(endtime):
        for tweet in gen_stream():
            if time.time() > endtime:
                break
            tweet_id=tweet.get('id')
            print(tweet_id)
    
    if __name__ == '__main__':
        endtime=time.time()+60*1
        pipeline(endtime)
    

    【讨论】:

    • 我就是这么想的。在手机上,打字太难了。我要做的唯一更正是删除 endtime 参数并在 for 循环之前添加 if
    • @Haleemur Ali 谢谢。该代码有效,但没有返回命令行。它只是停止打印。你能建议我一种返回命令行的方法吗
    猜你喜欢
    • 1970-01-01
    • 2013-04-18
    • 2012-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-12
    • 1970-01-01
    相关资源
    最近更新 更多