我有一个Python脚本,它检查拾取目录并处理它找到的任何文件,然后删除它们.
如何确保不会删除仍然由删除该目录中的文件的进程写入的文件?
我的测试用例非常简单.我将300MB的文件复制粘贴到拾取目录中,并且脚本经常会抓取仍在写入的文件.它仅对部分文件进行操作,然后将其删除.这会触发操作系统中的文件操作错误,因为它写入的文件消失了.
在打开/处理/删除它之前,我尝试获取文件锁(使用FileLock模块).但这没有帮助.
我已经考虑过检查文件上的修改时间,以避免在X秒之内发生任何事情.但这似乎很笨拙.
我的测试是在OSX上,但我正在尝试找到一个适用于主要平台的解决方案.
我在这里看到一个类似的问题(如何检查文件是否仍在写入?),但没有明确的解决方案.
谢谢
球队,
我正在做一个技术poc,用于从平面文件中读取记录并将数据插入数据库.
我正在使用chunk任务并成功使用spring batch admin运行此作业.
我必须实现重试策略以及一个功能来设置每次重试之间的时间间隔.我很难设置每次重试之间的时间间隔,因为chuck不直接支持它.这有什么工作吗?
我的代码是
<batch:job id="importDataJob" job-repository="jobRepository">
<batch:step id="importDataStep">
<batch:tasklet transaction-manager="transactionManager">
<batch:chunk reader="dataReader" writer="dataWriter" commit-interval="1" retry-limit="3">
<batch:retryable-exception-classes>
<batch:include class="javax.naming.ServiceUnavailableException" />
</batch:retryable-exception-classes>
</batch:chunk>
</batch:tasklet>
</batch:step>
</batch:job>
Run Code Online (Sandbox Code Playgroud) 我每分钟为我的脚本运行一个.bat文件(Scheduled Tak(CronJob)).当它运行时,Windows命令提示符出现在虚构的时间.
我的批次代码是这样的;
@ECHO OFF
C:\wamp\bin\php\php5.4.3\php.exe -f "C:\wamp\www\tst\index.php"
Run Code Online (Sandbox Code Playgroud)
如何在运行时隐藏此窗口?
所以我使用相同的批处理脚本构建多个客户端.如果在构建一个错误时出现错误,则该过程将停止并继续下一个过程.因为屏幕上有很多输出而我正在做其他事情,大部分时间我都想念有一个构建错误.
如果出现错误,有没有办法停止执行以下任务,并显示弹出消息以引起我的注意?或者至少停止执行所以当我回到命令窗口时,我可以看到出现故障?
@echo off
if "%1"=="?" GOTO HELP
if NOT "%1"=="" set rev=%1
if NOT "%2"=="" set version=%2
@echo on
rem build one
call perl buildClient.pl -brandName="myBrand" -group="group1"
rem build two
call perl buildClient.pl -brandName="myBrand" -group="group2"
rem build three
call perl buildClient.pl -brandName="myBrand" -group="group3"
rem build four
call perl buildClient.pl -brandName="myBrand" -group="group4"
@echo off
goto EXIT
:HELP
cls
echo.
echo.
echo usage: buildbrand.bat [revision] [version] [group]
echo.
echo ? = this help screen
echo.
echo revision = build version
echo …Run Code Online (Sandbox Code Playgroud) 有没有建议将这个xml配置转换为javaconfig:
<job id="job">
<step id="step1" >
<next on="FAILED" to="step2"/>
<next on="*" to="step3"/>
</step>
<step id="step2"/>
<step id="step3"next="step4"/>
<step id="step4"/>
</job>
Run Code Online (Sandbox Code Playgroud)
我创造了一个工作,一步走向成功的另一个步骤,另一个步骤导致失败:
SimpleJobBuilder builder = new JobBuilder("job").repository(jobRepository)
.start(step1()).next(step2())
.on("FAILED").to(step3()).build();
Run Code Online (Sandbox Code Playgroud) 我知道Mongoid v3 +支持批量插入Model.collection.insert().但是,我不认为它支持批量更新,其中每个记录的属性不同(所以我认为update_all也不会).有没有办法进行批量更新/ upsert而不是单记录查找和更新?
这是一个简化的例子,我有2个模型:
class Product
...
has_and_belongs_to_many :lists
end
class List
...
has_and_belongs_to_many :products
end
Run Code Online (Sandbox Code Playgroud)
Product创建new时,我将其与一个或多个相关联Lists.但是,我还需要Product每天更新属性而不会丢失List参考信息(我确定验证Product不会运行).
一种方法,不使用批处理,是调用find_or_initialize_by上Product和更新的属性.但对10K-1M +记录这样做是非常耗时的.
使用批量插入的另一种方法是做Product.delete_all,然后Product.collection.insert(...),但是这会产生新的,product_ids并且List不再保持与之的关系.
在这个例子中有没有办法进行批量更新或upsert?
在过去,我使用BPXBATCH从JCL执行java类文件.我想在下面的链接中转向使用IBM推荐的自定义JVM启动程序. http://www.ibm.com/developerworks/systems/library/es-java-batchz.html
我写了一个hello world java程序并在大型机上编译并将其打包到jar中.
下面是一个使用BPXBATCH的JCL成员示例.
//LMGHWRLD JOB (MY,ACCOUNTING,INFO),'HELLO WORLD',
// CLASS=A,MSGCLASS=H,REGION=512M,NOTIFY=&SYSUID
//********************************************************************
//* Run Java under a UNIX System Service shell
//********************************************************************
//STEP2 EXEC PGM=BPXBATCH,
// PARM='SH java com.foo.bar.HelloWorld'
//STDIN DD DUMMY
//STDOUT DD PATH='/tmp/&SYSUID..bpxbatch.out',
// PATHOPTS=(OWRONLY,OCREAT,OTRUNC),
// PATHMODE=SIRWXU
//STDERR DD PATH='/tmp/&SYSUID..bpxbatch.err',
// PATHOPTS=(OWRONLY,OCREAT,OTRUNC),
// PATHMODE=SIRWXU
//STDENV DD *
CLASSPATH=/u/myuid
//*********************************************************************
//* Copy HFS output files to SYSOUT, since BPXBATCH can only write
//* STDOUT and STDERR to HFS files.
//*********************************************************************
//STEP3 EXEC PGM=IKJEFT01,DYNAMNBR=300,COND=EVEN
//SYSTSPRT DD SYSOUT=*
//HFSOUT DD …Run Code Online (Sandbox Code Playgroud) 我正在使用Rails 4和ActiveAdmin,这是一个批处理动作集合表单,用于捕获用户执行批处理操作时的输入(在本例中为批处理邮件程序).有没有办法为输入自定义标签?
比如说:
batch_action :email, priority: 1 , form: {main_subject: :text,
message: :textarea
} do |ids, inputs|
batch_action_collection.find(ids).each do |user|
ContactBatchMailer.contact_batch_email(main_subject, message,...
Instead of having "main_subject", I would like to display a better formatted text, like "Main Subject", or even better, something more descriptive than the variable name by itself.
Run Code Online (Sandbox Code Playgroud)
我在文档https://github.com/activeadmin/activeadmin/blob/master/docs/9-batch-actions.md#batch-action-forms中进行了挖掘,但我无法做到.任何建议将不胜感激.
我正在使用Hibernate作为我的ORM层.我试图在一个事务中运行一批HQL查询(我不能使用session.update).问题是即使transaction.commit()在循环结束时,更新查询也会逐个运行.有没有办法在一个事务中运行多个HQL查询?
public void updateItems() {
t = session.beginTransaction();
for (int i = 0; i < itemList.size(); i++) {
Query q = createUpdateQuery(session, itemList.get(i));
q.executeUpdate(); //updating one by one, and not waiting for transaction commit
}
t.commit();
}
Query createUpdateQuery(Session session, Item item) {
Query q = session.createQuery(
"Update Item i set i.notes=:notes, i.time=:time, i.counter=:counter, i.status=:status Where i.id=:id and i.time=:time");
q.setParameter("time", item.getTime());
q.setParameter("status", item.getStatus());
q.setParameter("notes", item.getNotes());
q.setParameter("id", item.getId());
return q;
}
Run Code Online (Sandbox Code Playgroud)
感谢任何帮助.