Производительность скрипта Python как фоновый процесс - PullRequest
0 голосов
/ 30 августа 2009

Я нахожусь в процессе написания скрипта Python, который будет действовать как «клей» между приложением и некоторыми внешними устройствами. Сам скрипт довольно прост и имеет три различных процесса:

  1. Запрос данных (из сокетного соединения, через UDP)
  2. Получение ответа (от сокета, через UDP)
  3. Обработка ответа и предоставление данных стороннему приложению

Однако это будет сделано многократно и для нескольких (+/- 200 разных) устройств. Таким образом, как только он достигнет устройства № 200, он снова начнет запрашивать данные с устройства № 001. Моя главная задача - не перегружать процессор во время выполнения сценария.

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

Есть ли способ разрешить сценарию работать в фоновом режиме и потреблять как можно меньше системных ресурсов при выполнении своей задачи? Это будет работать на компьютере с Windows 2003.

Любой совет будет оценен.

Ответы [ 2 ]

5 голосов
/ 30 августа 2009

Если вы используете блокировку ввода-вывода для своих устройств, сценарий не будет использовать процессор во время ожидания данных. Сколько процессора вы используете, зависит от того, какие вычисления вы выполняете с данными.

4 голосов
/ 30 августа 2009

Twisted - лучший асинхронный каркас для Python - позволил бы вам выполнять эти задачи с минимальными перегрузками системных ресурсов, особенно если не исключительно, если вы хотите обрабатывать несколько устройств "одновременно" «а не просто циклический перебор среди нескольких сотен (последний может привести к слишком длительному времени цикла, особенно если существует риск того, что какое-то устройство будет иметь очень запоздалый ответ или даже не сможет ответить время от времени и приведет к» тайм-аут "; как правило, я бы рекомендовал иметь по крайней мере полдюжины устройств" в игре "в любой момент времени, чтобы избежать этого риска чрезмерной задержки).

...