废话不多说,直接开干!
今天遇到多线问题,还在搞一脸懵逼
thread.invoke
thread.command
thread.works
thread.manage
罗列这些下面我们介绍invoke
这个模式比较快
for(xxx){
invoke(
function(){
for(){
}
}
)
}
之前一直用这个模式,速度老是不快,感觉不是多线程
invoke(
function(){
for(){
}
}
)
直接上代码
import win.ui;
import string;
import inet.whttp;
import console;
import fsys.file;
import fsys.dlg;
import thread.works
import io;
import com;
import com.excel;
import console;
import mysql.client;
//多线程管理器
import thread.manage
//创建线程管理器
manage = thread.manage(3)
//console.log("正在连接数据库服务器...");
thread.invoke( function()
while(! thread.get("db4free.net:end")){
io.stdout.write(">");sleep(100);
}
)
var dbMysql,err = mysql.client(
server = "127.0.0.1"; //数据库服务器,可省略默认为localhost
uid = "sql_card_mm0527_";//用户名,可省略默认为root
pwd = "PtsfimRfp7xw3L84";
);
thread.set("db4free.net:end",true)
//console.clearScreen ();
if(!dbMysql){
console.log("连接数据库失败",err);
console.pause();
return;
}
//选择数据库
dbMysql.selectDb("sql_card_mm0527_")
/*DSG{{*/
mainForm = win.form(text="小鸡京东助手 for ";right=799;bottom=599)
mainForm.add(
btnInsert={cls="button";text="导入";left=600;top=24;right=704;bottom=56;z=4};
btn_select_file={cls="button";text="选择文件";left=464;top=24;right=584;bottom=56;z=7};
button={cls="button";text="获取数据";left=458;top=139;right=538;bottom=171;z=1};
button2={cls="button";text="添加关键词";left=248;top=137;right=352;bottom=169;z=8};
button3={cls="button";text="导出";left=597;top=138;right=677;bottom=170;z=9};
button4={cls="button";text="确定";left=458;top=86;right=538;bottom=115;z=13};
button5={cls="button";text="清除";left=596;top=84;right=679;bottom=117;z=14};
combobox={cls="combobox";left=69;top=90;right=172;bottom=116;edge=1;hscroll=1;items={};mode="dropdownlist";vscroll=1;z=10};
combobox2={cls="combobox";left=187;top=89;right=291;bottom=115;edge=1;hscroll=1;items={};mode="dropdownlist";vscroll=1;z=11};
combobox3={cls="combobox";left=297;top=89;right=404;bottom=115;edge=1;hscroll=1;items={};mode="dropdownlist";vscroll=1;z=12};
edit={cls="edit";text="螺蛳粉";left=88;top=139;right=179;bottom=167;edge=1;multiline=1;z=3};
edit2={cls="edit";left=16;top=34;right=424;bottom=66;edge=1;z=5};
listview={cls="listview";left=104;top=224;right=640;bottom=504;bgcolor=12632256;border=1;edge=1;vscroll=1;z=2};
txt_log={cls="button";text="会员到期时间:0天";left=10;top=1;right=150;bottom=26;z=6}
)
/*}}*/
mainForm.button5.oncommand = function(id,event){
mainForm.listview.clear();
}
mainForm.listview.insertColumn("序号",50)
mainForm.listview.insertColumn("关键词",100)
mainForm.listview.insertColumn("数量",100)
mainForm.listview.insertColumn("第一评论",100)
mainForm.listview.insertColumn("第二评论",100)
mainForm.listview.insertColumn("第三评论",100)
//mainForm.listview.insertColumn("价格1",100)
var num=0;
var filepath;
function addItem(str){
num++;
mainForm.listview.addItem( {
text={num;str;"0"}
})
}
function getResult(kwd){
import inet.whttp
import win
import console
var http = inet.whttp("Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0");
var url,s
var count=mainForm.listview.count;//拿到listview数据条数
count=2;
for(i=1;count;1){
//test1=mainForm.listview.getItemText(i,1);//拿到测试1 这列数据
kwd=mainForm.listview.getItemText(i,2);//拿到关键词 这列数据
url ='https://search.jd.com/Search?keyword='+kwd+'&enc=utf-8&wq='+kwd;
//url='https://search.jd.com/Search?keyword='+kwd+'&enc=utf-8&wtype=1&click=1&qrst=1&rt=1&stop=1&vt=2&wq='++kwd;
s = http.get(url);
i2,j2 = string.find(s ,"在京东找到了");
substr = string.sub(s,i2,i2+50)
//console.log(i,j,substr,"件"++kwd++"的类")
i2,j2,v = string.find(substr ,"(\d+)");
//mainForm.listview.setItemText(kwd++v,i,3)
mainForm.listview.setItemText(string.fromto(v,936,65001),i,3)
csv++= kwd+','++v+'\r\n'; //累加数据到csv
}
}
var obj = {
getComments=function (mainForm,i,product_ids){
//io.open();//打开控制台窗口
thread.invoke(
function(mainForm,i,product_ids){
import console;
import inet.whttp
import win
var http = inet.whttp("Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0");
var url,json
for name,product_id in product_ids{
url='https://club.jd.com/comment/productCommentSummaries.action?referenceIds='++product_id;
json = http.get(url);
var tab = web.json.parse(json);
var num_s = tab.CommentsCount[1].CommentCountStr;
sleep(500)
mainForm.listview.setItemText( string.fromto(num_s,936,65001),i,3+name)
}
},mainForm,i,product_ids
)
}
}
function enableDpiScaling(kwd,obj){
}
function getNumber(kwd,obj){
import console;
//console.log("线程在执行",thread.getId() )
import inet.whttp
import win
var csv="关键词,数量"+'\r\n'
var useagents={
"Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; InfoPath.3; rv:11.0) like Gecko";
"Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/5.0"
}
useagents[5]="Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0";
useagents[6]="Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0";
useagents[3]="Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0";
useagents[4]="Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0";
//var http = inet.whttp(useagents[ran]);
var url,s,http,ran
var count=mainForm.listview.count;//拿到listview数据条数
//count=2;
import fsys.dlg;
import fsys.file;
var filePath=fsys.getCurDir();//获取你操作的路径
//string.save(filePath+"/"+"test"+'.csv',csv)
outfile=fsys.file(filePath,"a")
var nu = 0
for(i=1;count;1){
nu+=1;
thread.invoke(
function(mainForm,obj,nu){
import console;
import inet.whttp
import win
var useagents={
"Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; InfoPath.3; rv:11.0) like Gecko";
"Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/5.0"
}
useagents[5]="Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0";
useagents[6]="Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0";
useagents[3]="Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0";
useagents[4]="Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0";
ran = math.random(1, #useagents);
http = inet.whttp(useagents[ran]);
kwd=mainForm.listview.getItemText(nu,2);//拿到关键词 这列数据
url ='https://search.jd.com/Search?keyword='+kwd+'&enc=utf-8&wq='+kwd;
s = http.get(url);
sleep(500)
i2,j2 = string.find(s ,"在京东找到了");
if(i2 == null){
i2 = '1100';
}
substr = string.sub(s,i2,i2+50)
if(i2 == null){
i2 = '1100';
}
i2,j2,v = string.find(substr ,"(\d+)");
if(v == null){
v = 0
}
mainForm.listview.setItemText(v,nu,3)
//outfile.write( kwd+','++33+'\r\n')
//csv++= kwd+','++v+'\r\n'; //累加数据到csv
if(tonumber(v)>2){//如果有前三,找出前三
import string.xml;
var htmlDoc = string.xml( s )
var J_goodsList= htmlDoc.getEle("J_goodsList")[1][1].queryEles( tagName = "a")[1].href;
if(htmlDoc.getEle("J_goodsList")[1][2] !=null){
var J_goodsList2= htmlDoc.getEle("J_goodsList")[1][2].queryEles( tagName = "a")[1].href;
}else{
J_goodsList2 = 0;
}
if(htmlDoc.getEle("J_goodsList")[1][3] !=null){
var J_goodsList3= htmlDoc.getEle("J_goodsList")[1][3].queryEles( tagName = "a")[1].href;
}else{
J_goodsList3 = 0;
}
if(J_goodsList2==null){
J_goodsList2 = 0;
}
if(J_goodsList3==null){
J_goodsList3 = 0;
}
var J_goodsLists={ J_goodsList;J_goodsList2;J_goodsList3 }
i2,j2,product_id = string.find(J_goodsList ,"(\d+)");
i2,j2,product_id2 = string.find(J_goodsList2 ,"(\d+)");
i2,j2,product_id3 = string.find(J_goodsList3 ,"(\d+)");
var product_ids={product_id;product_id2;product_id3}
obj.getComments(mainForm,nu,product_ids);
}
sleep(500)
},mainForm,obj,nu
);
}
}
var csv="关键词,数量,第一评论,第二评论,第三评论"+'\r\n'
mainForm.btn_select_file.oncommand = function(id,event){
filepath = fsys.dlg.open()//打开文件夹选取窗口,并返回所选择的文件夹的路径
mainForm.edit2.text=filepath
}
mainForm.btnInsert.oncommand = function(id,event){
//mainForm.listview.setItemText("444",1,1)
//path="C:\Users\Administrator\Desktop\book\keyword.txt";
fullpath =assert( io.exist( filepath ) ,"文件不存在" )
//var excel = com.excel( true );
//var book = excel.WorkBooks.Open(fullpath);
//var sheet = excel.WorkSheets(1);
tempfile = io.open(fullpath)
line = tempfile.read();//读取下一行
//console.log(line)
//console.log(fullpath)
var nu = 0;
while( line ) {
nu ++;
bb=string.fromto(line,936,65001);
ex = string.split(bb,",");
//console.log(ex[1])
//console.log(table.unpack(ex))
//io.print(table.unpack(ex));
var box = {p1=ex[2];p2=ex[3];p3=ex[4];key=ex[1]};
if(ex[2] !='' &&ex[2]!='一级类目'){
addCombobox(ex[2]);
if(ex[3] !='' &&ex[3]!='二级类目'){
addCombobox2(ex[3]);
if(ex[4] != ''&&ex[4]!='三级类目'){
addCombobox3(ex[4]);
}
}
}
num++;
mainForm.listview.addItem( {
text={num;ex[1];"0"}
})
line = tempfile.read();//读取下一行
}
}
mainForm.button.oncommand = function(id,event){
getNumber(1,obj)
}
mainForm.button2.oncommand = function(id,event){
addItem(mainForm.edit.text)
}
mainForm.button3.oncommand = function(id,event){
now_time = "京东商品数"+tonumber( time(time.now(),"%Y%m/%d %H:%M:%S") );
var count=mainForm.listview.count;//拿到listview数据条数
var filePath=fsys.getCurDir();//获取你操作的路径
outfile=fsys.file(filePath+"/"++now_time++'.csv',"a")
var line = 0;
for(i=1;count;1){
line+=1
kwd=mainForm.listview.getItemText(line,2);//拿到关键词 这列数据
num=mainForm.listview.getItemText(line,3);//拿到数量 这列数据
com1 = mainForm.listview.getItemText(line,4);//拿到评论1 这列数据
com2 = mainForm.listview.getItemText(line,5);//拿到评论2 这列数据
com3 = mainForm.listview.getItemText(line,6);//拿到评论3 这列数据
//console.log(kwd,num,com1,com2,com3)
outfile.write( kwd+','++num++tostring(com1)++tostring(com2)++tostring(com3)++'\r\n')
csv++= kwd+','++num++','++tostring(com1)+','++tostring(com2)+','++tostring(com3)++'\r\n'; //累加数据到csv
}
if(filePath){
string.save(filePath+"/"++now_time++'.csv',csv);
win.msgbox("导出到"++filePath++now_time++'.csv');
}
}
mainForm.combobox.oncommand = function(id,event){
//mainForm.combobox.clear();
var result = dbMysql.query("SELECT level1 FROM `cmf_role1` where 1 limit 1,7000");
for level1 in result.each(){
mainForm.combobox.add(level1)
}
mainForm.combobox2.clear();
}
mainForm.combobox2.oncommand = function(id,event){
datas = mainForm.combobox.text;
mainForm.combobox3.clear();
var result = dbMysql.query("SELECT level2 FROM `cmf_role1` where level1='"+datas+"' limit 1,7000");
for level2 in result.each(){
mainForm.combobox2.add(level2)
}
}
mainForm.combobox3.oncommand = function(id,event){
datas2 = mainForm.combobox2.text;
var result = dbMysql.query("SELECT level3 FROM `cmf_role1` where level2='"+datas2+"' limit 1,7000");
for level3 in result.each(){
mainForm.combobox3.add(level3)
}
}
mainForm.button4.oncommand = function(id,event){
mainForm.listview.clear();
datas = mainForm.combobox.text;
datas2 = mainForm.combobox2.text;
datas3 = mainForm.combobox3.text;
if(datas !="请选择"){
if(datas !="请选择"&&datas2!="请选择"&&datas3!="请选择"&&datas2!=""&&datas3!=""){
//console.log(123)
//查询数据并返回记录集
var result = dbMysql.query("SELECT name FROM `cmf_role1` where level1='"+datas+"' and level2='"+datas2+"' and level3='"+datas3+"'");
for name in result.each(){
mainForm.listview.addItem( {
text={num;name;"0"}
})
}
return
}
if(datas !="请选择"&&datas2!="请选择"&&datas2!=""){
//console.log(12)
var result = dbMysql.query("SELECT name FROM `cmf_role1` where level1='"+datas+"' and level2='"+datas2+"'");
for name in result.each(){
mainForm.listview.addItem( {
text={num;name;"0"}
})
}
return
}
var result = dbMysql.query("SELECT name FROM `cmf_role1` where level1='"+datas+"'");
//console.log(11)
for name in result.each(){
mainForm.listview.addItem( {
text={num;name;"0"}
})
}
}
}
function addCombobox(obj){
mainForm.combobox.add(obj);
}
function addCombobox2(obj){
mainForm.combobox2.add(obj);
}
function addCombobox3(obj){
mainForm.combobox3.add(obj);
}
//默认显示项设置
mainForm.combobox.add("请选择")
mainForm.combobox.selectString("请选择")//查找并默认选中
mainForm.combobox2.add("请选择")
mainForm.combobox2.selectString("请选择")//查找并默认选中
mainForm.combobox3.add("请选择")
mainForm.combobox3.selectString("请选择")//查找并默认选中
import fsys;
import fsys.file;
//获取当前时间
now_time = tonumber( time(time.now(),"%Y%m/%d %H:%M:%S") );
var result = dbMysql.query("SELECT id,ctime,time FROM `ap_dianka` where username='soubei'");
//console.log(level3)
for id,time,ctime in result.each(){
//获取当前时间差数
//total_time = math.ceil((now_time -stime)/86400);
//计算最终剩余时间
//row_time = time-total_time;
var result = dbMysql.query("update `ap_dianka` set nowtime="++now_time++" where username='soubei'");
day = math.ceil(((ctime+time)-now_time)/86400);
if(day < 1){
win.msgboxTest("会员到期 @为了一包辣条--接私活 ","错误消息")
return ;
}
mainForm.txt_log.text = "编号"+id+"会员到期:"+day+"天";
}
//mainForm.enableDpiScaling();
mainForm.edit2.oncommand = function(id,event){
}
mainForm.show();
return win.loopMessage();