从流程

时间:2017-02-21 13:24:08

标签: process python-3.5 peewee

我正在尝试使用从同一数据库读取的3个进程创建一个程序。在我开始介绍流程之前,代码正在运行。

我从PeeWee执行select()时遇到MemoryError,我怀疑共享资源有问题。最小的例子:

models.py

from playhouse.pool import PooledSqliteExtDatabase

file_scanner_database = PooledSqliteExtDatabase(
    None,
    max_connections=32,
)

class FileModel(Model):
    class Meta:
        database = file_scanner_database

main.py

from file_scanner import FileScanner
from models import file_scanner_database
from models import FileModel
from multiprocessing import Process

def create_scanner_agent(data):
    scanner = FileScanner(data)
    scanner.start_scanner()

shared_info = {'db_location': '/absolute/path/to/database'}

file_scanner_database.init(shared_info['db_location'])
file_scanner_database.connect()
file_scanner_database.create_tables([FileModel], safe=True)

new_process = Process(
    target=create_scanner_agent,
    args=(shared_info,)
)
new_process.daemon = True
new_process.start()

try:
    new_process.join()
except KeyboardInterrupt:
    pass

new_process.terminate()

file_scanner.py

from models import file_scanner_database
from models import FileModel

class FileScanner:
    def __init__(self, data):
        for k, v in data.items():
            setattr(self, k, v)

        file_scanner_database.init(self.db_location)
        file_scanner_database.connect()

    def start_scanner(self):
        while True:
            # THIS IS WHERE THE PROGRAM CRASHES
            for row in FileModel.select():
                ...

1 个答案:

答案 0 :(得分:0)

看起来你正试图通过分叉访问内存?还是一些这样的疯狂?我认为答案是你做错了。尝试在fork之后打开数据库连接。