Допустим, у меня есть функция, которая записывает в файл. У меня также есть функция, которая циклически повторяет чтение из указанного файла. У меня обе эти функции выполняются в отдельных потоках. (На самом деле я читаю / пишу в регистры через MDIO, поэтому я не могу одновременно выполнять оба потока, только один или другой, но для простоты скажем, что это файл)
Теперь, когда я запустите функцию записи изолированно, она выполняется довольно быстро. Однако когда я запускаю многопоточную систему и перед запуском получаю блокировку, кажется, что она работает очень медленно. Это потому, что второй поток (функция чтения) запрашивает блокировку? Есть ли способ обойти это?
В настоящее время я просто использую простой RLock, но открыт для любых изменений, которые могут повысить производительность.
Edit: В качестве примера я приведу простой пример того, что происходит. Поток чтения в основном всегда выполняется, но иногда отдельный поток выполняет вызов для загрузки. Если я тестирую, запустив нагрузку из командной строки, работа в потоке будет как минимум в 3 раза медленнее.
поток записи:
import usbmpc # functions I made which access dll functions for hardware, etc
def load(self, lock):
lock.acquire()
f = open('file.txt','r')
data = f.readlines()
for x in data:
usbmpc.write(x)
lock.release()
поток чтения:
import usbmpc
def read(self, lock):
addr = START_ADDR
while True:
lock.acquire()
data = usbmpc.read(addr)
lock.release()
addr += 4
if addr > BUF_SIZE: addr = START_ADDR