首页 > 解决方案 > python中的多处理错误'需要1个位置参数,但给出了2个'

问题描述

)

我是 python 和 django 的初学者,并尝试使用多处理运行外部代码。

在我第一次尝试使用 numpy 导入 .txt 时,我的代码运行。在我第二次尝试使用熊猫导入 .csv 时,我收到一条错误消息。有什么不同?为什么不运行第二次尝试?

快速.py

import os
import pandas as pd
import numpy as np

def import_txt(q, w_url):
    w_data = np.loadtxt(w_url,delimiter=';', dtype='str')
    q.put(w_data)

def import_csv(q, w_url):
    w_data = pd.read_csv(w_url)
    w_data.head()
    q.put(True)

视图.py

from multiprocessing import Process, Queue, set_start_method
from app.static.code.quick import import_txt as q_txt
from app.static.code.quick import import_csv as q_csv

这行得通

def q_history(request):

    if request.method == 'POST' and request.is_ajax():

        #erstellt den pfad
        m_user = request.user.username
        m_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
        m_dir = os.path.join(m_dir, 'app', 'media', m_user, 'quick', 'ini.txt')

        set_start_method('spawn', True)
        q = Queue()
        p = Process(target=q_txt, args=(q,m_dir))
        p.start()
        m_data = q.get()
        p.join()      

        return JsonResponse(m_data.tolist(), safe=False)

    else :
        assert isinstance(request, HttpRequest)
        return render(
        request,
        'quick.html',
        {
            'title':'title',
            'message':'Your application description page.',
            'year':datetime.now().year,
        }
    )

这不是

def q_csv(request):

    if request.method == 'POST' and request.is_ajax():

        #erstellt den pfad
        m_user = request.user.username
        m_file = '2019_Test.csv'
        m_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
        m_dir = os.path.join(m_dir, 'app', 'media', m_user, 'quick', 'input', m_file)

        set_start_method('spawn', True)
        q = Queue()
        p = Process(target=q_csv, args=(q,m_dir))
        p.start()
        m_data = q.get()
        p.join()      

        return JsonResponse(m_data.tolist(), safe=False)

    else :
        assert isinstance(request, HttpRequest)
        return render(
        request,
        'quick.html',
        {
            'title':'title',
            'message':'Your application description page.',
            'year':datetime.now().year,
        }
    )

错误

Process Process-1:
Traceback (most recent call last):
  File "/usr/local/Cellar/python/3.7.4/Frameworks/Python.framework/Versions/3.7/lib/python3.7/multiprocessing/process.py", line 297, in _bootstrap
    self.run()
  File "/usr/local/Cellar/python/3.7.4/Frameworks/Python.framework/Versions/3.7/lib/python3.7/multiprocessing/process.py", line 99, in run
    self._target(*self._args, **self._kwargs)
TypeError: q_csv() takes 1 positional argument but 2 were given

标签: pythondjangoprocessmultiprocessingqueue

解决方案


有了这条线:

p = Process(target=q_csv, args=(q,m_dir))

你正在调用这个方法

def q_csv(request):

有 2 个参数 ( qand m_dir) 但它只需要 1 ( request),我想你可能只是想以不同的方式命名你的函数 q_csv 因为我猜你想要导入的那个。所以换行

def q_csv(request):

def q_csv_processing(request):

看看它是否能让你达到你想要的目标。


推荐阅读