我对Django中的后台任务有一个概念性的问题。我正在通过PythonAnywhere运行一个Python / Django站点。
我有一个名为“ databooks”的网络应用,该应用由具有以下条目的表单组成:
然后,此数据手册应用程序查看文件夹位置,并编译其中的所有其他文件以创建一个大PDF。然而,由于合并页面并添加页脚等的性质,它被认为是“重处理”由PythonAnywhere,他们定义为一个网络工作者超过5分钟,他们分别杀了。
我想到的解决方案是在提交表单后执行background-python脚本,该脚本将databooks views.py文件中的整个内容输入到backgrounddatabookgenerator.py文件中,该文件可以独立于用户在浏览器窗口中的运行而运行。
在查看了PythonAnywhere对此的诊断之后,我一直在研究一些选项,但是到目前为止,在实现后台任务(即django-background-tasks)方面还没有成功。
是否有人熟悉Django工作流程,在单击“提交”按钮后,可以实现将另一个python文件作为后台任务调用的实现?为此,我想使此后台任务独立于用户单击提交后的操作,并允许繁重的数据手册生成过程自行完成,而无需考虑时间。
views.py
def Databook_req(request):
submitted = False
if request.method == 'POST':
form = DatabookForm(request.POST, request.FILES)
What_would_you_like_to_save_the_completed_data_book_as = request.POST['What_would_you_like_to_save_the_completed_data_book_as']
Major_Equipment_Folder = request.POST['Major_Equipment_Folder']
if form.is_valid():
data_dict = {
'What_would_you_like_to_save_the_completed_data_book_as_': str(What_would_you_like_to_save_the_completed_data_book_as),
'Major_Equipment_Folder': str(Major_Equipment_Folder)
}
form.save()
DataBookName = str(What_would_you_like_to_save_the_completed_data_book_as) + '.pdf'
original_path = str(Major_Equipment_Folder)
Run Code Online (Sandbox Code Playgroud)
***然后,数据手册代码通过引用上述变量来遵循此规则。我不确定是否需要一个单独的python文件来作为后台任务运行下面的所有内容,但是它目前正在超时。
我在使用 PyInstaller 时遇到了包含 python 包的问题,特别是docxcompose. 这是一个需要在 PyInstaller 目录中导入其 site-package 文件夹的包。我已经用 pip 安装了 docxcompose,它位于我的 site-packages 库中,文件夹标记为docxcompose. import docxcompose明确列在我在 PyInstaller 中引用的 python 文件中。
我正在使用规范文件和 --onedir 方法进行调试,因为我想最终使用 --onefile 进行安装。到目前为止,我已将这些添加到规范文件的分析部分,但没有成功:
hiddenimports=['docxcompose']
pathex=['C:\\Users\\myusername\\AppData\\Local\\Programs\\Python\\Python37\\Lib\\site-packages']
Run Code Online (Sandbox Code Playgroud)
docxcompose 没有添加到我的 PyInstall 中是否有原因?有没有办法可以在安装过程中强制复制该文件夹?