Django:多处理中的查询发生 django.db.utils.OperationalError: SSL 错误?

use*_*632 3 python django multiprocessing django-queryset

我用Django 1.11.1PostgreSQL作为数据库。

这是代码:

模型.py

class Symbol(StockDataBaseModel):
    code = models.CharField(max_length=20)
    name = models.CharField(max_length=30)


class DailyPrice(StockDataBaseModel):
    symbol = models.ForeignKey(Symbol)

    date_time = models.DateTimeField()
    open = models.DecimalField(max_digits=15, decimal_places=2)
    high = models.DecimalField(max_digits=15, decimal_places=2)
    low = models.DecimalField(max_digits=15, decimal_places=2)
    close = models.DecimalField(max_digits=15, decimal_places=2)
Run Code Online (Sandbox Code Playgroud)

获取数据部分

def _get_price_df(ticker, start_date, end_date):
    from data_manager.models import DailyPrice, Symbol

    symbol_set = Symbol.objects.prefetch_related('dailyprice_set').filter(name__iexact=ticker)
    if symbol_set.exists():
        symbol = symbol_set[0]
        if start_date and end_date:
            price_set = symbol.dailyprice_set.filter(Q(date_time__gte=start_date) & Q(date_time__lte=end_date))
        elif start_date:
            price_set = symbol.dailyprice_set.filter(Q(date_time__gte=start_date))
        elif end_date:
            price_set = symbol.dailyprice_set.filter(Q(date_time__lte=end_date))
        else:
            price_set = symbol.dailyprice_set.all()   
    else:
        raise ValueError("No such ticker exists : {}".format(ticker))


class StockDailyDataManager(object):

    def get_price_data_df(self, tickers, start_date=None, end_date=None):
        pool = Pool(12)
        df_list = pool.starmap(
            _get_price_df, [(ticker, start_date, end_date) for ticker in tickers]
        )
Run Code Online (Sandbox Code Playgroud)

我试过的:

tickers = ['MSFT', 'AAPL', 'samsung'...]
pool = Pool(12)
df_list = pool.starmap(
    _get_price_df,
    [(ticker, start_date, end_date) for ticker in tickers]
)
Run Code Online (Sandbox Code Playgroud)

它发生错误:

django.db.utils.OperationalError: SSL error: decryption failed or bad record mac
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题?

tar*_*kki 5

我在管理命令中使用了它,其中使用了多处理池。打电话

from django import db
db.connections.close_all()
Run Code Online (Sandbox Code Playgroud)

在每个过程的最开始都有帮助。然后,当从进程内部访问数据库时,该进程创建了一个新连接,并没有尝试从父级共享原始连接。