[Twisted-Python] Multiple clients

Gerrat Rickert grickert at coldstorage.com
Fri Jun 18 15:23:50 EDT 2010


>It is possible to:
> - start the reactor when I initialize my program (eg. in main)
> - call connectTCP or connectSSL when I want and every time I want?
>
>Something like this:
>
>def check_messages(account):
>	# connect to imap server and check for new mailboxes/messages
>	reactor.connectSSL(...)
>
>
>if __name__ == "__main__":
>	reactor.run()
>
>	check_message(account1)
>	check_message(account2)
>	...
>	do something else
>	...
>	check_message(accountn)
>
>
>Because I can't implement this :}


Something like this (obviously won't work verbatim 
& may not be the best example, 
but hopefully will give you the idea):

def check_messages(account):
    # connect to imap server and check for new mailboxes/messages
    reactor.connectSSL(...)
    # should return a deferred!

def do_something_else():
    return defer.succeed(None)  # return a deferred here too

def something_failed(rslt):
  print rslt
  reactor.stop()

def call_my_stuff(accountList):

  # check messages asynchronously
  checks = [check_message(account) for account in accountList]

  dl = defer.DeferredList(checks)
  dl.addCallback(do_something_else) # wait until all messages checked to
run
  dl.addCallback(runner, accountList) # wait till we've done something
else
  dl.addErrback(something_failed) # ALWAYS attach errbacks

def runner(accountList):
  reactor.callLater(0.1, call_my_stuff, accountList)

if __name__ == "__main__":

    accountList = [account1, account2]
    reactor.callWhenRunning(runner, accountList)
    reactor.run()



More information about the Twisted-Python mailing list