проблема загрузки jQuery

Я хотел бы способствовать с простым примером и объяснениями, которые я нашел полезными, когда я должен был заняться этой проблемой сам.

Здесь я вставлю немного полезной информации о GIL и простом повседневном примере (использующий multiprocessing.dummy) и его сравнительные тесты с и без многопоточности.

Глобальная блокировка интерпретатора (GIL)

Python не позволяет многопоточность в самом истинном значении слова. Это имеет пакет многопоточности, но если Вы хотите мультираспараллелить для ускорения кода, тогда это обычно - не хорошая идея использовать его. Python имеет конструкцию, названную Глобальной блокировкой интерпретатора (GIL). GIL удостоверяется, что только один из Ваших 'потоков' может выполниться в любой момент. Поток получает GIL, действительно немного работает, затем передает GIL на следующий поток. Это происходит очень быстро так с человеческим глазом, может казаться, что Ваши потоки выполняются параллельно, но они действительно просто сменяются с помощью того же ядра процессора. Вся эта передача GIL добавляет наверху к выполнению. Это означает, что, если Вы хотите сделать свой код выполненным быстрее тогда с помощью пакета поточной обработки часто, не хорошая идея.

существуют причины использовать пакет поточной обработки Python. Если Вы хотите выполнить некоторые вещи одновременно, и эффективность не является беспокойством, то она прекрасна полностью и удобна. Или если Вы выполняете код, который должен ожидать чего-то (как некоторый IO) тогда, он мог иметь много смысла. Но библиотека поточной обработки не позволит Вам использовать дополнительные ядра процессора.

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

, Почему Это Вопросы

, поскольку много людей проводит много времени, пытаясь найти узкие места в их необычном Python многопоточным кодом, прежде чем они изучат, каков GIL.

, Как только эта информация ясна, вот мой код:

#!/bin/python
from multiprocessing.dummy import Pool
from subprocess import PIPE,Popen
import time
import os

# In the variable pool_size we define the "parallelness".
# For CPU-bound tasks, it doesn't make sense to create more Pool processes
# than you have cores to run them on.
#
# On the other hand, if you are using I/O-bound tasks, it may make sense
# to create a quite a few more Pool processes than cores, since the processes
# will probably spend most their time blocked (waiting for I/O to complete).
pool_size = 8

def do_ping(ip):
    if os.name == 'nt':
        print ("Using Windows Ping to " + ip)
        proc = Popen(['ping', ip], stdout=PIPE)
        return proc.communicate()[0]
    else:
        print ("Using Linux / Unix Ping to " + ip)
        proc = Popen(['ping', ip, '-c', '4'], stdout=PIPE)
        return proc.communicate()[0]


os.system('cls' if os.name=='nt' else 'clear')
print ("Running using threads\n")
start_time = time.time()
pool = Pool(pool_size)
website_names = ["www.google.com","www.facebook.com","www.pinterest.com","www.microsoft.com"]
result = {}
for website_name in website_names:
    result[website_name] = pool.apply_async(do_ping, args=(website_name,))
pool.close()
pool.join()
print ("\n--- Execution took {} seconds ---".format((time.time() - start_time)))

# Now we do the same without threading, just to compare time
print ("\nRunning NOT using threads\n")
start_time = time.time()
for website_name in website_names:
    do_ping(website_name)
print ("\n--- Execution took {} seconds ---".format((time.time() - start_time)))

# Here's one way to print the final output from the threads
output = {}
for key, value in result.items():
    output[key] = value.get()
print ("\nOutput aggregated in a Dictionary:")
print (output)
print ("\n")

print ("\nPretty printed output:")
for key, value in output.items():
    print (key + "\n")
    print (value)
6
задан nkr1pt 3 September 2009 в 00:14
поделиться

2 ответа

.all связан с событием window.onload , которое запускается только один раз.

Чтобы выделить синтаксис после загрузки страницы, используйте вместо этого функцию highlight :

content.load("content/"+this.id+".html", function () {
  // this is executed after the content is injected to the DOM
  contentContainer.effect("highlight");
  SyntaxHighlighter.highlight();
});

Скрестив пальцы, это работает, в противном случае (если посмотреть на код) вам может потребоваться добавить некоторые явные аргументы (где {} - пустой набор параметров конфигурации, а - это ] будет содержимым при вызове из обработчика нагрузки ajax):


  SyntaxHighlighter.highlight({}, this);
25
ответ дан 8 December 2019 в 04:30
поделиться

Вам нужно вызвать это в обратном вызове для загрузки:

  content.load("content/"+this.id+".html",function() {
     SyntaxHighlighter.all();
  });

load является асинхронным, поэтому он успешно продолжает выполнение операторов, пока запрос GET выполняется в фоновом режиме.

0
ответ дан 8 December 2019 в 04:30
поделиться
Другие вопросы по тегам:

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