2013-10-26 3 views
-5

Я запускаю программу python, которая находит все простые числа. Возможно ли распределить всю мощность компьютера для этой единственной задачи. Используя все 4 ядра, которые имеет процессор?Назначить все полномочия компьютера Python

Спасибо!

p.s. Конечно, я использую Linux!

код я использую:

nextCheck = time.time() + 60 
primesFound = 0 
while 1: 
    if isPrime(toTest): 
     open("primeList.txt", "a").write(str(toTest)+"\n") 
     primesFound += 1 
    toTest += 2 

    if (toTest+1) % 1000 == 0: 
     if time.time() >= nextCheck: 
      print "Average speed: " + str(float(primesFound)/((time.time()-nextCheck)+60)) + "/s" 
      primesFound = 0 
      nextCheck = time.time() + 60 
+3

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

+2

Вы имеете в виду примитивное обильное число? или простое число? В любом случае найти все из них невозможно (существует бесконечное количество обоих ...), даже если вы работаете на Linux. – jbat100

+0

Вы можете запрограммировать свое приложение на C (которое довольно часто намного быстрее, чем Python для текущих реализаций), и вы должны рассмотреть многопоточность (то есть [pthreads] (https://computing.llnl.gov/tutorials/pthreads)) или многопроцессорной обработки, и, возможно, также используя GPGPU, например с [OpenCL] (http://en.wikipedia.org/wiki/Opencl) –

ответ

2

Использование multiprocessing. Если вы используете CPython, только один поток за раз может выполнять байт-код Python, поэтому использование потоков не так много помогает.

Если вы можете, например, напишите простую функцию для проверки числа, вы можете использовать метод multiprocessing.Pool объекта map(), чтобы применить эту функцию к списку чисел.

0

Вы также можете назначить более высокий приоритет ваш процесс Python с использованием хорошо:

nice -n -20 python app.py 

... что поможет, но не гарантирует, что вы выдавливая всю власть с вашего компьютера.

Для этого кода, то лучшее, что вы можете попробовать это:

  1. не пишут номера непосредственно в выходной файл и сохранить их в структуре памяти,
  2. программа событие для не проверяя все время о том, нужно ли печатать статистику скорости или нет,
  3. попытаться разделить в нескольких параллельных задачах операции, выполняемые в функции «isPrime» для выполнения их в виде задач separte.

... однако я не знаю, заслуживает ли это приложение этого усилия.

+0

Это 'nice -n -20' не поможет, если системная загрузка не будет достаточно высокой, чтобы иметь много * runnable * процессов, конкурирующих за процессор (что не так на общем рабочем столе). –

+0

@BasileStarynkevitch на рабочем столе - это именно то место, где у вас много процессов, конкурирующих за использование процессора. Например, у вас будут все процессы, связанные с графическим исполнением самого рабочего стола, веб-навигатором .. просто выполните «верх» в консоли, и вы увидите, сколько из них у вас есть прямо сейчас ... – Ricardo

+2

Я писал о * выполняемых * процессов. У меня есть много процессов (около 250), но большинство из них почти без дела .... Мой текущий нагрузка составляет около 0,15 .... –

Смежные вопросы