从一个python脚本并行运行代码/任务?

时间:2014-03-20 02:24:23

标签: python multithreading parallel-processing python-multithreading

在这段代码中,我只是从队列中拉出来并在无限循环中处理消息。 所以,我通过API弹出基于REST的队列,解析消息,然后通过Twilio发送短信,并一次又一次地无限地执行。 我考虑到了规模,所以我想最大限度地利用时间,让每个脚本同时运行几次。

如何将此代码转换为同时运行4次,而不必执行该文件四次。

  .....
  var = 1 
  while var == 1 :  # This constructs an infinite loop
    try:
        queue = CHECKQ.queue("name_of_queue")
        msgs = queue.get(max=1, timeout=None)
        url =  msgs['messages'][0]['body']
        msgId =  msgs['messages'][0]['id']
        delMsg = queue.delete(msgId)
        number = "1"+url
        message = client.messages.create(to=number, from_="+15555555555",
                    body="Here's the link to install the controller -        
                    http://someapp.com")
    except (IndexError):
        sleep(1)

1 个答案:

答案 0 :(得分:0)

我使用了一个与多处理混合的无限循环,这是一个启动新子进程而不是线程的库。

我开发了2个脚本/模块sendTxtMsg()和getWorkOffQueue()。

    #!/usr/bin/env python 

    from lib.python.imports import *
    client = TwilioRestClient()

    def sendTxtMsg():
        try:
            work = getWorkOffQueue()
            number = json.dumps(work["phoneNumber"])
            message = client.messages.create(to=number, from_="+15555555555",
                      body="Here's the link to install the controller -                      
                      http://some.awesome.app/jelly")
            phonenumbersInsert(json.dumps(work))
        except(TypeError):
            pass
            print "Nothing on Queue"
        except Exception as e:
            print e
            log1.info(e)

并将它们组合成下面的一个模块,它同时执行工作流程多次,实质上是从一个机构的代码中抽出许多手臂和手来排队。

    #!/usr/bin/env python                                                              

    from multiprocessing import Process
    from lib.python.imports import *

    def goGetEm():
        x = 1 
        while x == 1:
            sendTxtMsg()

     if __name__ == '__main__':
         Process(target=goGetEm).start()
         Process(target=goGetEm).start()
         Process(target=goGetEm).start()
         Process(target=goGetEm).start()