This commit is contained in:
Jack Robison 2020-03-19 13:24:25 -04:00
parent 923cfa3d50
commit 95a9a76598
No known key found for this signature in database
GPG key ID: DF25C68FE0239BB2

View file

@ -2,6 +2,7 @@ import os
import logging import logging
import asyncio import asyncio
import sqlite3 import sqlite3
import platform
from binascii import hexlify from binascii import hexlify
from dataclasses import dataclass from dataclasses import dataclass
from contextvars import ContextVar from contextvars import ContextVar
@ -51,11 +52,14 @@ def run_read_only_fetchone(sql, params):
raise raise
READER_EXECUTOR_CLASS = ThreadPoolExecutor if 'ANDROID_ARGUMENT' in os.environ else ProcessPoolExecutor if platform.system() == 'Windows' or 'ANDROID_ARGUMENT' in os.environ:
ReaderExecutorClass = ThreadPoolExecutor
else:
ReaderExecutorClass = ProcessPoolExecutor
class AIOSQLite: class AIOSQLite:
reader_executor: READER_EXECUTOR_CLASS reader_executor: ReaderExecutorClass
def __init__(self): def __init__(self):
# has to be single threaded as there is no mapping of thread:connection # has to be single threaded as there is no mapping of thread:connection
@ -76,7 +80,7 @@ class AIOSQLite:
db.writer_connection = sqlite3.connect(path, *args, **kwargs) db.writer_connection = sqlite3.connect(path, *args, **kwargs)
readers = max(os.cpu_count() - 2, 2) readers = max(os.cpu_count() - 2, 2)
db.reader_executor = READER_EXECUTOR_CLASS( db.reader_executor = ReaderExecutorClass(
max_workers=readers, initializer=initializer, initargs=(path, ) max_workers=readers, initializer=initializer, initargs=(path, )
) )
await asyncio.get_event_loop().run_in_executor(db.writer_executor, _connect_writer) await asyncio.get_event_loop().run_in_executor(db.writer_executor, _connect_writer)