У меня есть проект моделирования, который я выполняю на Python, в котором множество рабочих потоков пытаются выполнить задачи и отслеживают, сколько времени это занимает. Эти задачи приходят в разное время и блокируют разные ресурсы.
Для этого у меня есть по 1 потоку для каждого из воркеров и один поток, вся цель жизни которого — просто поддерживать след часов. Однако, несмотря на это, кажется, что рабочие потоки пропускают некоторые «секунды», отслеживаемые потоком часов.
Есть ли лучший способ сделать это, чтобы он не пропускал время? ?
Вот результат, который показывает переменную «all_time» (в данном случае мои часы) и пропускает некоторые значения.
I' Я пробовал использовать несколько рабочих потоков, и я пробовал с только один.
Я даже не знаю, как лучше сформулировать вопрос, поэтому, если у вас есть способ сформулировать вопрос получше, я буду рад его услышать.
Я даже не знаю, как лучше сформулировать вопрос.
p>
Текущая мощность:
WHO WHEN
0 WORKER0(0-14400) 0
1 WORKER0(0-14400) 1
2 WORKER0(0-14400) 2
3 WORKER0(0-14400) 3
4 WORKER0(0-14400) 6
5 WORKER0(0-14400) 11
6 WORKER0(0-14400) 12
7 WORKER0(0-14400) 15
8 WORKER0(0-14400) 17
9 WORKER0(0-14400) 18
10 WORKER0(0-14400) 21
11 WORKER0(0-14400) 24
12 WORKER0(0-14400) 26
13 WORKER0(0-14400) 27
14 WORKER0(0-14400) 29
15 WORKER0(0-14400) 30
16 WORKER0(0-14400) 31
17 WORKER0(0-14400) 32
18 WORKER0(0-14400) 33
19 WORKER0(0-14400) 35
ожидаемый результат:
WHO WHEN
0 WORKER0(0-14400) 0
1 WORKER0(0-14400) 1
2 WORKER0(0-14400) 2
3 WORKER0(0-14400) 3
4 WORKER0(0-14400) 4
5 WORKER0(0-14400) 5
6 WORKER0(0-14400) 6
7 WORKER0(0-14400) 7
8 WORKER0(0-14400) 8
9 WORKER0(0-14400) 9
10 WORKER0(0-14400) 10
11 WORKER0(0-14400) 11
12 WORKER0(0-14400) 12
13 WORKER0(0-14400) 13
14 WORKER0(0-14400) 14
15 WORKER0(0-14400) 15
16 WORKER0(0-14400) 16
17 WORKER0(0-14400) 17
18 WORKER0(0-14400) 18
19 WORKER0(0-14400) 19
Код:
import random
import threading
import time
import pandas as pd
stop_event = threading.Event()
clock_lock = threading.Condition()
clock_time = 0
all_time = 0
days_running = 1
issue_lock = threading.Condition()
issue_df = pd.DataFrame(columns = ["WHO","WHEN"])
##bus.emit("ISSUE", [who, what, where, when, why])
def clean_issue_list():
global issue_df
issue_df.drop_duplicates(inplace = True,ignore_index=True)
issue_df.sort_values(by = ["WHEN"], inplace = True,ignore_index=True)
from event_bus import EventBus
bus = EventBus()
@bus.on('ISSUE')
def issuehandler(msg):
global issue_list
global issue_df
issue_lock.acquire()
issue_df = pd.concat([pd.DataFrame([msg[:]], columns=issue_df.columns), issue_df], ignore_index=True)
issue_lock.release()
def worker(starttime,endtime,max_stack_height,efficiancy, startzone, allowed_zones = []): #thread? maybe?
global clock_time
global all_time
global taskqueue
global zonelist
who = threading.current_thread().name
current_task = None
current_zone = startzone
allowedtime = starttime #allowed time is the time its allowed to start working
#reset it to be the end time of its current task after every action
while not stop_event.is_set():
clock_lock.acquire()
now = all_time
clock_lock.release()
if now >= allowedtime and now < endtime: #get a task
clock_lock.acquire()
bus.emit("ISSUE", [who, all_time])
clock_lock.release()
def work_clock(): #make this a thread, have it just constantly update a clock over and over again
global clock_time
global all_time
global days_running
maxtime = 60*60*24
while not stop_event.is_set():
clock_lock.acquire()
clock_time+=1
all_time+=1
if clock_time >= maxtime:
clock_time = 0
days_running -= 1
if days_running
Подробнее здесь: https://stackoverflow.com/questions/792 ... ated-clock
Как я могу заставить свои потоки успешно работать по смоделированным часам? ⇐ Python
Программы на Python
1734464816
Anonymous
У меня есть проект моделирования, который я выполняю на Python, в котором множество рабочих потоков пытаются выполнить задачи и отслеживают, сколько времени это занимает. Эти задачи приходят в разное время и блокируют разные ресурсы.
Для этого у меня есть по 1 потоку для каждого из воркеров и один поток, вся цель жизни которого — просто поддерживать след часов. Однако, несмотря на это, кажется, что рабочие потоки пропускают некоторые «секунды», отслеживаемые потоком часов.
Есть ли лучший способ сделать это, чтобы он не пропускал время? ?
Вот результат, который показывает переменную «all_time» (в данном случае мои часы) и пропускает некоторые значения.
I' Я пробовал использовать несколько рабочих потоков, и я пробовал с только один.
Я даже не знаю, как лучше сформулировать вопрос, поэтому, если у вас есть способ сформулировать вопрос получше, я буду рад его услышать.
Я даже не знаю, как лучше сформулировать вопрос.
p>
Текущая мощность:
WHO WHEN
0 WORKER0(0-14400) 0
1 WORKER0(0-14400) 1
2 WORKER0(0-14400) 2
3 WORKER0(0-14400) 3
4 WORKER0(0-14400) 6
5 WORKER0(0-14400) 11
6 WORKER0(0-14400) 12
7 WORKER0(0-14400) 15
8 WORKER0(0-14400) 17
9 WORKER0(0-14400) 18
10 WORKER0(0-14400) 21
11 WORKER0(0-14400) 24
12 WORKER0(0-14400) 26
13 WORKER0(0-14400) 27
14 WORKER0(0-14400) 29
15 WORKER0(0-14400) 30
16 WORKER0(0-14400) 31
17 WORKER0(0-14400) 32
18 WORKER0(0-14400) 33
19 WORKER0(0-14400) 35
ожидаемый результат:
WHO WHEN
0 WORKER0(0-14400) 0
1 WORKER0(0-14400) 1
2 WORKER0(0-14400) 2
3 WORKER0(0-14400) 3
4 WORKER0(0-14400) 4
5 WORKER0(0-14400) 5
6 WORKER0(0-14400) 6
7 WORKER0(0-14400) 7
8 WORKER0(0-14400) 8
9 WORKER0(0-14400) 9
10 WORKER0(0-14400) 10
11 WORKER0(0-14400) 11
12 WORKER0(0-14400) 12
13 WORKER0(0-14400) 13
14 WORKER0(0-14400) 14
15 WORKER0(0-14400) 15
16 WORKER0(0-14400) 16
17 WORKER0(0-14400) 17
18 WORKER0(0-14400) 18
19 WORKER0(0-14400) 19
Код:
import random
import threading
import time
import pandas as pd
stop_event = threading.Event()
clock_lock = threading.Condition()
clock_time = 0
all_time = 0
days_running = 1
issue_lock = threading.Condition()
issue_df = pd.DataFrame(columns = ["WHO","WHEN"])
##bus.emit("ISSUE", [who, what, where, when, why])
def clean_issue_list():
global issue_df
issue_df.drop_duplicates(inplace = True,ignore_index=True)
issue_df.sort_values(by = ["WHEN"], inplace = True,ignore_index=True)
from event_bus import EventBus
bus = EventBus()
@bus.on('ISSUE')
def issuehandler(msg):
global issue_list
global issue_df
issue_lock.acquire()
issue_df = pd.concat([pd.DataFrame([msg[:]], columns=issue_df.columns), issue_df], ignore_index=True)
issue_lock.release()
def worker(starttime,endtime,max_stack_height,efficiancy, startzone, allowed_zones = []): #thread? maybe?
global clock_time
global all_time
global taskqueue
global zonelist
who = threading.current_thread().name
current_task = None
current_zone = startzone
allowedtime = starttime #allowed time is the time its allowed to start working
#reset it to be the end time of its current task after every action
while not stop_event.is_set():
clock_lock.acquire()
now = all_time
clock_lock.release()
if now >= allowedtime and now < endtime: #get a task
clock_lock.acquire()
bus.emit("ISSUE", [who, all_time])
clock_lock.release()
def work_clock(): #make this a thread, have it just constantly update a clock over and over again
global clock_time
global all_time
global days_running
maxtime = 60*60*24
while not stop_event.is_set():
clock_lock.acquire()
clock_time+=1
all_time+=1
if clock_time >= maxtime:
clock_time = 0
days_running -= 1
if days_running
Подробнее здесь: [url]https://stackoverflow.com/questions/79289196/how-can-i-get-my-threads-to-successfully-go-by-a-simulated-clock[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия