在python中安排任务

时间:2015-09-05 20:09:08

标签: python

我试图每隔5秒安排一次任务,这就是我所做的:

import schedule
import time
import tweepy 
from threading import Timer

def job():
  iGen = (i for i in range(1, 6))
  for i in iGen:

    i += 1
    mymessage = "My message here " + str(i)

    print(mymessage)

schedule.every(5).seconds.do(job)

while 1:                                
   schedule.run_pending()
   time.sleep(1)

但结果是:

My message here 2 ..after 5 secs
My message here 3
My message here 4
My message here 5
My message here 6
My message here 2 ..after 5 secs
My message here 3
My message here 4
My message here 5
My message here 6
My message here 2 ..after 5 secs
My message here 3
My message here 4
My message here 5
My message here 6

我需要的是:

My message here 2 ..after 5 secs
My message here 3 ..after 5 secs 
My message here 4 ..after 5 secs
My message here 5 ..after 5 secs
My message here 6 ..after 5 secs

抱歉新手问题,谢谢

3 个答案:

答案 0 :(得分:2)

你的工作是循环超过2-6,每个打印。听起来你希望每次运行时只打印一次。这样做会,但不会对消息进行编号。

import schedule
import time

def job():
    print("Message")

schedule.every(5).seconds.do(job)

while 1:                                
   schedule.run_pending()
   time.sleep(1)

要获得编号有点复杂,但您可以使用静态变量:

import schedule
import time

def job():
    job.i += 1
    print("Message: " + str(job.i))
job.i = 1

schedule.every(5).seconds.do(job)

while 1:
    schedule.run_pending()
    time.sleep(1)

答案 1 :(得分:2)

如果您只需要增加一个数字并每X秒打印一次,您可以尝试这样的事情:

i = 0
while 1:
    print("My message here "+str(i))
    i++
    time.sleep(5)

是否需要进行线程化?

如果您向我提供有关应用程序应如何工作的更多详细信息,我将编辑此答案。

答案 2 :(得分:2)

我认为你的问题在于你的工作功能!问问自己,循环2到5是否是每个工作方法的一部分?根据你的问题描述,它应该只包含打印消息:

public function send(Swift_Mime_Message $message, &$failedRecipients = null)
{
    $client = $this->getHttpClient();
    $client->setDefaultOption('verify', false); // ***add this***
    $client->post('https://mandrillapp.com/api/1.0/messages/send-raw.json', [
        'body' => [
            'key' => $this->key,
            'raw_message' => (string) $message,
            'async' => false,
        ],
    ]);
}

然后在其他部分你应该传递消息和num:

def job(msg,num):  #if your message is same you won't need to pass it,same for num
    print(msg+str(num))