Как предположил Алекс Мартелли, вы можете использовать многопроцессорный модуль. Он очень похож на модуль Threading, поэтому вам легко начать работу. Ваш код может быть таким, например:
import multiprocessing
def get_page(*args, **kwargs):
# your web page downloading code goes here
def start_get_page(timeout, *args, **kwargs):
p = multiprocessing.Process(target=get_page, args=args, kwargs=kwargs)
p.start()
p.join(timeout)
if p.is_alive():
# stop the downloading 'thread'
p.terminate()
# and then do any post-error processing here
if __name__ == "__main__":
start_get_page(timeout, *args, **kwargs)
Конечно, вам нужно каким-то образом получить возвращаемые значения кода загрузки вашей страницы. Для этого вы можете использовать multiprocessing.Pipe или multiprocessing.Queue (или другие способы, доступные при многопроцессорной обработке). Там есть больше информации, а также образцы, которые вы можете проверить на http://docs.python.org/library/multiprocessing.html.
Наконец, многопроцессорный модуль включен в Python 2.6. Он также доступен для Python 2.5 и 2.4 на pypi (вы можете использовать
многопроцессорная обработка easy_install
)
или просто посетите pypi, загрузите и установите пакеты вручную.
Примечание: я понимаю, что это было опубликовано некоторое время назад. У меня была похожая проблема с этим, и я наткнулся здесь и увидел предложение Алекса Мартелли. Если бы это было реализовано для моей проблемы и решил поделиться им. (Я хотел бы поблагодарить Алекса за то, что он указал мне правильное направление.)