Python: запустить еще одну бесконечную функцию и продолжить текущую бесконечную функцию [duplicate]

После обновления java, eclipse не запустится, поскольку изменилось местоположение jdk по умолчанию. Добавление следующих строк в файл eclipse.ini немедленно разрешило мою проблему:

  -vm C: \ Program Files (x86) \ Java \ jdk1.7.0_75 \ bin \ javaw.exe  

Я добавил эти строки непосредственно перед vmargs. Он выглядит следующим образом:

  ... --launcher.defaultAction openFile -vm C: \ Program Files (x86) \ Java \ jdk1.7.0_75 \ bin \ javaw.exe -  vmargs -Dosgi.requiredJavaVersion = 1.5 -Dhelp.lucene.tokenizer = standard -Xms40m -Xmx512m  

Для получения дополнительной информации о eclipse.ini посетите этот сайт http: // wiki .eclipse.org / Eclipse.ini # -vm_value: _Windows_Example

В моем случае я использую 32-битное eclipse и java. Если вы установили 32-разрядную и 64-разрядную версии java, будьте осторожны, чтобы выбрать правильную версию. Для 64-разрядных версий обратитесь к файлу javaw.exe в каталоге

  C: \ Program Files \ Java \ jdk1.8.0_60 \ bin  

3
задан Daniel 10 January 2014 в 23:25
поделиться

2 ответа

«Несколько циклов Python в одно и то же время. Я знаю, что это невозможно [...]» - это выглядит действительно смешно.

Можно одновременно запустить две петли, точно так, как вы ее описали. И в обоих случаях имеет смысл, в зависимости от того, что вам действительно нужно и чего нужно. Если задачи полностью независимы, вы должны запускать их как два сценария. Если вам нужны эти два цикла для реализации одной задачи, и для них есть смысл, чтобы они были в одном файле, вы можете использовать multiprocessing .

Протестировано для python 2.7.5+ и 3.3.2 +.

Вот несколько минимальных примеров:

from multiprocessing import Process
import time

def f(name):
    print('hello', name)
    time.sleep(10)

def d(name):
    print('test2', name)
    time.sleep(10)

if __name__ == '__main__':
    p1 = Process(target=f, args=('bob',))
    p2 = Process(target=d, args=('alice',))
    p1.start()
    p2.start()
    p1.join()
    p2.join()

Скрипт запускается в течение 10 секунд, и обе строки печатаются сразу, что означает, что все работает.

time python3 ./process.py 
hello bob
test2 alice

real  0m10.073s
user  0m0.040s
sys   0m0.016s
6
ответ дан luk32 15 August 2018 в 15:21
поделиться
  • 1
    Извините за мой плохой английский :) Петли независимы, см. Редактировать по моему вопросу. – Daniel 10 January 2014 в 23:29
  • 2
    Итак, как будет выглядеть решение, если задачи полностью независимы, и я хотел бы запустить его как два сценария? – Daniel 15 January 2014 в 14:02
  • 3
    Положите f() в f.py запустите его в фоновом режиме и поместите d() в d.py и запустите его в фоновом режиме. Из вашего описания скрипты не должны общаться, просто продолжайте работать. Больше ничего. Вы должны посмотреть, как запустить задачу в bg на вашей системе, но это отдельная независимая проблема. – luk32 16 January 2014 в 09:09
  • 4
    Я запускаю этот код на 2,7.10, если я продолжаю его запускать несколько раз, выход перепутался. Есть ли причина для этого? – weefwefwqg3 31 October 2017 в 16:08
  • 5
    ВНИМАНИЕ: если я перемещаю time.sleep() перед print() и вставляю time.time() внутри print(), вывод может быть испорчен, если я запустил его несколько раз. Вот один из запутанных выходов: ('h('tesello't2', 'bob, '', alice', 1509462604.0133221509462604.013331)). Я запускаю этот код на 2.7.10. Может ли кто-нибудь объяснить, почему? – weefwefwqg3 31 October 2017 в 16:11

Это также возможно, запустив несколько сценариев, а некоторые - как .pyw для удобства и получив информацию об обмене через сокеты UDP. Примечание 127.0.0.1 - это отправить себя в ЛЮБОМ случае. Также для порта просто убедитесь, что никакие другие программы не используют порт, который вы используете. Как и в других программах, я имею в виду любую программу, которая использует порты или даже базовые настройки маршрутизатора.

Пример (отправка)

import os
from sockets import *
host = "ip"
port = "9000"
addr = (host, port)
UDPSock = socket(AF_INET, SOCK_DGRAM)
data = "Random Text"
send = data.encode("ascii")
UDPSock.sendto(send, addr)
UDPSock.close()

Образец (получение)

import os
from socket import *
host = ""
port = 9000
addr = (host, port)
UDPSock = socket(AF_INET, SOCK_DGRAM)
UDPSock.bind(addr)
(data, addr) = UDPSock.recvfrom(1024)#1024 is MAX bytes to receive
data = data.decode('ascii')
UDPSock.close()

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

0
ответ дан Luke 15 August 2018 в 15:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: