Хорошо, у меня возникла проблема с выражением моих проблем с кодом, над которым я работаю, без сброса тонны кода; так вот что это будет синхронно (вместо того, чтобы спрашивать об этом с точки зрения асинхронности).
Также для классов, когда следует обращаться к переменной через аргумент метода и когда к ней следует обращаться через переменную экземпляра?
Синхронно это будет выглядеть так... Примечание: фактические URL-адреса сервера и парсинг отличаются, но только усложняют ситуацию. Также в следующем примере метод get_token принимает сеанс в качестве параметра, должен ли он вместо этого получить сеанс, используя вместо этого self.session?
import urllib
import time
class SyncExampleClass(object):
def __init__(self):
self.session = None
self.token = None
self.session_time = -1
def get_session(self):
s = urllib.urlopen("http://example.com/session/").read()
self.session_time = int(time.time())
return s
def get_token(self, session):
t = urllib.urlopen("http://example.com/token/?session=%s" % session).read()
return t
def construct_api_call(self, api_method):
# if the session is over an hour old (is that the correct sign?)
if time.time() - 3600 > self.session_time or self.session is None:
self.session = get_session()
self.token = get_token(self.session)
call = urllib.urlopen("http://example.com/api/?method=%s%session=%s&token=%s" % (api_method, self.session, self.token) ).read()
return call
construct_api_call
, вы установите другой, если прошло меньше часа с тех пор, как вы в последний раз делали это - если вы когда-нибудь проведете один час без вызова, вы никогда не установите другой сеанс (или токен) когда-либо снова. ОЧЕНЬ странное поведение — вы уверены, что<
вif
— это то, что вам нужно?! (Когда вы даете спецификации по коду, вам лучше дважды убедиться, что код делает именно то, что вы хотите, конечно, поскольку нет аналога в естественном языке, с которым можно было бы проверить спецификации). - person Alex Martelli   schedule 12.08.2010session
иtoken
частью URL-адреса или это файлы cookie? Ваш призыв кurllib.urlopen
в лучшем случае заблокирует реактор. Вместо этого вы должны использоватьtwisted.web.http.HTTPClient
. - person MattH   schedule 12.08.2010