Bazı garipliklerle, ayarlandıktan sonra diğer işlevlerde erişilemeyen bir değişkenle karşılaşıyorum. Bu beklendiği gibi wget süreci başladıPython değişken kapsamı, komut dosyasında
from ingest.task import html
web_url = 'https://www.gnu.org/software/wget/manual/html_node/index.html'
ingest = html.download.delay(web_url, 54321)
aracılığıyla
base_path = ''
@app.task(bind=True)
def status(self):
"""
returns the count of files downloaded and the timestamp of the most recently downloaded file
"""
num_count = 0
latest_timestamp = ''
for root, _, filenames in os.walk(base_path):
for filename in filenames:
file_path = root + '/' + filename
file_timestamp = datetime.fromtimestamp(os.path.getctime(file_path))
if latest_timestamp == '' or file_timestamp > latest_timestamp:
latest_timestamp = file_timestamp
num_count += 1
@app.task(bind = True)
def download(self, url='', cl_id=-1):
if len(url) == 0 or cl_id < 0:
return None
base_path = settings.WGET_PATH + str(cl_id)
log_paths = {
'output' : wget_base_path + '/out.log',
'rejected' : wget_base_path + '/rejected.log'
}
create_files(log_paths)
wget_cmd = 'wget -prc --convert-links --html-extension --wait=3 --random-wait --no-parent ' \
'--directory-prefix={0} -o {1} --rejected-log={2} {3}'.\
format(wget_base_path, log_paths['output'], log_paths['rejected'], url)
subprocess.Popen(wget_cmd, shell = True)
Ben diyoruz html.py
adında bir Kereviz görev dosyasıdır. Ancak set geçmez dosyanın üst kısmında base_path
parametre, bu yüzden download
sonra çağrılan status
rağmen
status = html.status.delay()
base_path
değişken boş bir dize yoluyla status
çağırdığınızda. Bunun nedeni, bu görevlerin bir sınıfa benzer bir senaryoda olması. Bu hat
base_path = settings.WGET_PATH + str(cl_id)
sadece isim base_path
ile yerel bir değişken oluşturur Çünkü onların fonksiyonu download
yılında
Hmm, ok. Açıklama için teşekkürler. Java'nın bir başka örneği Python ile beni heyecanlandırıyor. – Jason