Разработка подсистемы управления процессами с невытесняющей многозадачностью на python

Разработать подсистему управления процессами с невытесняющей многозадачностью на языке программирования python и в виде окошка программы

Так а как помочь, какой вопрос?
Или вы просто заданием хвастаетесь?)

Вообще было уже: Разработка подсистемы управления процессами с невытесняющей многозадачностью

да,но проблему не решил,а код нужен(

Python. Лучшие практики и инструменты.
стр. 490
Кооперативная многозадачность и асинхронный ввод / вывод

с 493 страницы можно будет взять код и он будет верным?

Нет, можно почитать это, чтоб начать разбираться в теме и приступить к реализации своей задачи )
Ну и ссылки в предыдущей теме.

До конца семестра еще далеко :slight_smile:

1 лайк

Не код будет верным.
А как сказали выше постом. Войдете в ТЕМУ. И поймете, Для Вас это, или нет.

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

Так помочь то чем?
Готовый код именно под вашу конкретную задачу найти сложно будет.
Смотреть примеры в учебниках, в сети. Разобраться в теме и написать свой код.
Других вариантов не знаю.

времени просто мало осталось и надо к субботе,у меня всё готово,но код понять не могу как составить

И что готово тогда если кода нет?
Описание без кода не написать.
А если есть описание, тогда брать его как ТЗ и писать по нему код.

P. S.
Из книги по ссылке, за неделю можно было главу перечитать как минимум семь раз. И начать писать код… И вопросы уже были бы по существу.
Побороть лень просто нужно наверное.

не в лени дело,просто сроки сдачи поджимают,поэтому и обратился сюда,а летом из-за работы и подобного не было времени на код

Дык а толку “обращаться” и не пытаться хоть что-то делать? Шанс получить халявное решение есть для простых задач на 5 минут, а для такого только советы куда копать, ответы на конкретные вопросы и т.п.

Получить готовое решение можно если найти кого-нибудь за деньги на фриланс-биржах и т.д., но за 2 дня конечно уже вряд ли получится, разве что среди однокурсников.

1 лайк
print('Модель подсистемы управления процессами с невытесняющей многозадачностью')
print('prod. by ALEX')
desc_list = []

def CreateProc(quant):
	description = {
		'id': len(desc_list),
		'quant': quant
	}
	desc_list.append(description)

def start():
	print('start')

	max_quant = 0
	flag = 0
	for x in desc_list:
		if x['quant'] > max_quant:
			max_quant = x['quant']
	print('Количество квантов ', max_quant)

	while flag - 1 != max_quant:
		flag+=1
		print('__________ИТЕРАЦИЯ №',flag,'__________')
		for x in desc_list:
			x['quant'] -= 1
			print('Выполнение процесса №', x['id'], 'Осталось квантов - ', x['quant'])

			if x['quant'] == 0:
				print('до удаления', desc_list)
				desc_list.remove(x)
				print('Удаляем', x)
				print('После удаления', desc_list)
				#print('Процесс №', x['id'], ' завершен')

		print('_______________________________')
		

while True:
	command = input('>>> ')

	if command == 'add':
		quant = input('Введите квант >>> ')
		CreateProc(int(quant))

	if command == 'desc_list':
		for x in desc_list:
			print(x)

	if command == 'start':
		start()

у меня вот есть с вытесняющей многозадачностью,но вот что с невытесняющий делать хз,точнее как из этого,переделать под неё

Невытесняющая это если процесс сам решает когда передать управление другим (например, после завершения какой-то подзадачи).

Как это показать тут я чот хз, какой-то слишком простой пример )
Я бы наверно делал, чтоб процессы выполняли какую-то более конкретную работу (считали что-то, …), и тогда в определенных местах функции делающей эту работу вызывал бы передачу управления другим.

Как примитивный вариант наверно можно в описание процесса

добавить свойства

  • на каком он сейчас кванте своей работы (изначально 0)
  • список номеров квантов, на которых он будет передавать управление

и гонять это в бесконечном цикле пока все не завершатся.

просто как я понял,это ещё ± правильный вариант,ибо прошлый был неверный и вообще не в ту степь.грубо говоря,нужно сделать цикл,который будет всё прогонять до завершения процесса,но как это оформить,вот с чем затрудняюсь

можешь помочь с этим?

Да вот же примитивный пример из учебника. Работы на 15 минут вместе с чтением главы.

Не вытесняющая многозадачность
# Non-crowding multitasking
import time
import random
import asyncio

async def waiter(name):
    for _ in range(4):
        time_to_sleep = random.randint(1, 3) / 4
        time.sleep(time_to_sleep)
        print(
            "{} waited {} seconds"
            "".format(name, time_to_sleep)
        )
        
async def main():
    await asyncio.wait([waiter("first"), waiter("second")])
    
if __name__ == "__main__":
    loop = asyncio.get_event_loop()
    loop.run_until_complete(main())
    loop.close()

Вытесняющая многозадачность
# Pre-supplanting multitasking
import time
import random
import asyncio

async def waiter(name):
    for _ in range(4):
        time_to_sleep = random.randint(1, 3) / 4
        await asyncio.sleep(time_to_sleep)
        print(
            "{} waited {} seconds"
            "".format(name, time_to_sleep)
        )
        
async def main():
    await asyncio.wait([waiter("first"), waiter("second")])
    
if __name__ == "__main__":
    loop = asyncio.get_event_loop()
    loop.run_until_complete(main())
    loop.close()

Выше ж написано что можно сделать в том примере

(первое свойство можно не добавлять если отнимать от quant как в примере было)

Чот не похоже.
Имеется в виду, что ожидание считать работой? (если нет, то тогда тут вообще ничего нет)
Для наглядности ставим паузу 5 сек time_to_sleep = 5, и видим, что оба процесса завершают ожидание одновременно, то есть никто никого не блокирует.

Вообще тут просто сравнение синхронного и асинхронного ожидания.

Тогда уж скорее первый пример невытесняющий:

second waited 3 seconds
second waited 3 seconds
second waited 3 seconds
second waited 3 seconds
first waited 3 seconds
first waited 3 seconds
first waited 3 seconds
first waited 3 seconds

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