Попробуйте это:
function getRandomColor() {
var letters = '0123456789ABCDEF'.split('');
var color = '#';
for (var i = 0; i < 6; i++ ) {
color += letters[Math.round(Math.random() * 15)];
}
return color;
}
Посмотрите это в действии: http://jsfiddle.net/3wjgG/1/
Предполагая, что мы говорим о классической реализации (CPython):
Другими словами, потоки Python на самом деле намного менее богаты, чем потоки Java - не говоря уже о том, что только один поток на процесс может фактически запускать код Python (другие могут запускать код C или ждать).
Для чего угодно. , т.е. все, что выходит за рамки ограниченных возможностей потоковой передачи Python,я рекомендовал вам использовать модуль multiprocessing
из стандартной библиотеки - или переключиться на реализации Python, которые позволяют использовать более широкие подходы к многопоточности, такие как Jython для JVM или IronPython для .NET.
На обычные приоритеты потоков Java нельзя рассчитывать. Вы можете обнаружить, что поток с более низким приоритетом работает, когда поток с более высоким приоритетом готов и ожидает.
Существует нечто, называемое «Java реального времени» (см. http://www.rtsj.org ), которое обеспечивает соблюдение приоритета потока, по крайней мере, для класса RealtimeThread. Обычный java.lang.Thread может по-прежнему не обеспечивать истинный порядок приоритетов.
Сделайте небольшой шаг в отношении пункта 1, потому что приоритеты Java Thread могут работать не так, как можно было бы ожидать.
Из руководства SCJP:
Поскольку поведение приоритета планирования потоков не гарантируется, используйте приоритеты потоков как способ повышения эффективности вашей программы, но просто убедитесь, что ваша программа не зависит от этого поведения для правильности.
К сожалению, в стандартном пакете Python есть так называемая GIL, или глобальная блокировка интерпретатора. Это означает, что одновременно будет работать только один из ваших потоков. При этом возможны простые многопоточные приложения, и их довольно легко написать. Модуль многопоточности содержит базовые примитивы синхронизации, такие как мьютексы, семпахоры и т. Д.
Существует также замечательный оператор with, который автоматизирует большинство аспектов использования блокировок. Например:
import threading
myLock = threading.Lock()
Затем, чтобы использовать блокировку:
with myLock:
#lock has now been acquired
print "I have the lock and can now to fun stuff"
print "The lock has been released"
Я почувствовал необходимость развенчать распространенные мифы, увековеченные здесь:
Можно ли отдавать приоритеты потокам Python, как в Java?
Не в смысле ОС. Но вы можете использовать совместную многозадачность и собственный настраиваемый планировщик, чтобы определенные потоки использовали больше времени. Вы также можете установить временные интервалы между потоками следующим образом:
http://docs.python.org/library/sys.html#sys.setcheckinterval
Как я могу убить, остановить, приостановить и прервать поток в Python ?
Обратите внимание, что вы можете это сделать. Это просто сложно, и люди будут философствовать о том, насколько это зло. Но это верно для любого языка. Вы можете использовать следующую функцию API:
http://docs.python.org/c-api/init.html#PyThreadState_SetAsyncExc
Или вы можете использовать свою базовую ОС, такую как TerminateThread, в окнах за пределами TID. Только не забудьте установить глобальную блокировку.
Группы потоков - для чего они на самом деле? Поддерживает ли их Python тоже?
Я так не думаю. Они предназначены для управления группами потоков.
Синхронизация - в Java мы используем просто ключевое слово synchorinized для метода, объекта ... А как насчет Python?
Прочтите модуль потоков и потоков.
вот пример того, как я разрешаю останавливать потоки (на самом деле работает только для потоков внутри циклов, если вы не хотите помещать if "self.alive" перед каждой строкой):
import threading, Queue
class HaltableThread(object.Thread):
def __init__(self):
self.stringQueue = Queue.Queue()
self.alive = True
def run(self):
while self.alive:
try:
data = self.stringQueue.read(0.01) #100ms block until data
except Queue.Empty:
pass
else:
print data
def stop(self):
self.alive = False