Подключение интерфейса GUI с асинхронной (ых) операцией ftp

Попытка реализовать диалоговое окно прогресса для загрузки файлов, которые выглядят как перекрестные ссылки между диалогом загрузки IE и диалогом загрузки Firefox с библиотекой GUI python в Windows.

  1. Какие асинхронные (S) FTP-библиотеки существуют для python? В идеале я должен иметь возможность выполнять возобновление загрузки файлов и отслеживать ход каждой параллельной загрузки файлов.
  2. Если я выполняю загрузку каждого файла в отдельном процессе каждый, как бы получить статус загрузки и отобразить его в диалоговом окне индикатора выполнения?

«ftplib» – это стандартная библиотека ftp, встроенная в Python. В Python 2.6 у него был параметр обратного вызова, добавленный к методу, используемому для загрузки.

Этот обратный вызов – это функция, которую вы предоставляете библиотеке; он вызывается один раз для каждого блока, который завершен.

Ваша функция может отправить сообщение в графический интерфейс (возможно, в другом потоке / процессе, используя стандартную межпоточную или межпроцессную связь), чтобы сообщить ему обновить индикатор выполнения.

Справка

Если передача данных выполняется в отдельном потоке из графического интерфейса пользователя, вы можете использовать wx.CallAfter (), когда вам нужно обновить индикатор выполнения из потока передачи данных.

Во-первых, использование CallAfter () является обязательным, поскольку функция wxPython не может быть вызвана из дочерних потоков.

Во-вторых, это отменит выполнение переноса данных из графического интерфейса в основном потоке.

Обратите внимание, что CallAfter () работает только для потоков, а не для отдельных процессов. В этом случае использование пакета многопроцессорности должно помочь.

Если вы хотите, чтобы полный пример использования потоков и событий для обновления вашего графического интерфейса с помощью длинных задач с использованием WxPython, посмотрите эту страницу . Этот учебник очень полезен и помог мне выполнить подобную программу, чем ваша.

Если вы не можете использовать ftplib Python 2.6, есть компания, предлагающая коммерческое решение.

CKFTP2 Chilkat стоит несколько сотен долларов, но обещает работать с Python 2.5 и предлагает вызов функции get_AsyncBytesSent (), который возвращает необходимую вам информацию. (Я не видел обратного вызова, но он может это предложить).

Я не использовал этот продукт.

Также подумайте, что если FTP окажется слишком жестким / дорогостоящим, вы всегда можете переключиться на HTTP-загрузки. У Chilkat есть бесплатная библиотека загрузки HTTP / HTTPS.