织梦CMS - 轻松建站从此开始!

沙龙国际-沙龙365国际_沙龙国际网上娱乐

当前位置: 主页 > 沙龙国际网上娱乐 >

(沙龙国际网上娱乐) python3 使用 multiprocessing.Poo

时间:2017-07-04 10:55来源:未知 作者:admin 点击:
代码如下,for_process 是待启动的子进程。 用 A 代表被注释的 4 行代码,B 代表之后的 6 行代码。 我的感觉是 A 和 B 应该是等价的,但是事实上 B代码可以正常运行,替换成A这一段之后,

代码如下,for_process 是待启动的子进程。
用 A 代表被注释的 4 行代码,B 代表之后的 6 行代码。
我的感觉是 A 和 B 应该是等价的,但是事实上 B代码可以正常运行,替换成A这一段之后,貌似就没有进入fro_process这个函数(函数的第一行是print(“子进程启动”)),连这个print都没有运行。

不知道是哪里写错了~
上网看了下别人的事例,貌似使用进程池的时候,确实只需要三行代码,不知道我这三行代码是哪里错了?
系统是win 10 64位,python 3。

    # p = Pool(3)
    # for i in range(3):
    #     print(i)
    #     p.apply_async(for_process, args=(title_list_of_init_half[i], dict_init_queue))
    # p.close()

    p_fi = Process(target=for_process, args=(title_list_of_init_half[0], dict_init_queue))
    p_se = Process(target=for_process, args=(title_list_of_init_half[1], dict_init_queue))
    p_th = Process(target=for_process, args=(title_list_of_init_half[2], dict_init_queue))
    p_fi.daemon = True
    p_se.daemon = True
    p_th.daemon = True
    p_fi.start()
    p_se.start()
    p_th.start()

下面是完整的代码:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import jieba
import math
import os
from datetime import datetime
from collections import defaultdict
import sqlite3
from multiprocessing import Process, Queue, Pool
from time import sleep, ctime

user_dict = os.path.abspath(os.path.join(os.path.dirname(__file__), os.pardir))   "/DATA/user_dict/game_name_list.txt"
init_path = os.path.abspath(os.path.join(os.path.dirname(__file__), os.pardir))   "/DATA/doc_list.txt"
update_path = os.path.abspath(os.path.join(os.path.dirname(__file__), os.pardir))   "/DATA/doc_list_mini.txt"
num_of_rows = 1000000 * 2.7  # 暂时用来替代 len(title_list)


def database_create():
    connect = sqlite3.connect("weight.db")
    cursor = connect.cursor()
    flag = True

    try:
        cursor.execute(
                'create table keywords'
                '(key varchar(20) primary key,key_weight float,docs varchar(2000),games varchar(900))'
        )
    except Exception as e:
        print("error: "   str(e)   " @ database_create")
        flag = False
    finally:
        cursor.close()
        connect.commit()
        connect.close()
        return flag


def database_merge(target_list, is_init=False):
    print("merge begin @ "   str(ctime()))
    connect = sqlite3.connect("weight.db")
    cursor = connect.cursor()
    flag = True
    try:
        for item in target_list:
            a0 = item
            a1 = target_list[item][0]
            a2 = ",".join(target_list[item][1])
            a3 = ",".join(target_list[item][2])

            if is_init:
                cursor.execute(
                        'insert into keywords(key,key_weight,docs,games) values (?,?,?,?)', (a0, a1, a2, a3))
            else:
                pass    # 如果有主键则 update,否则 insert。

    except Exception as e:
        print("error: "   str(e)   " @ database_merge")
        flag = False
    finally:
        cursor.close()
        connect.commit()
        connect.close()
    print("merge end @ "   str(ctime()))
    return flag


def load_user_dict():
    with open(user_dict, "r", encoding="utf-8") as ud:
        for line in ud.readlines():
            xxx = line.strip()
            jieba.add_word(xxx)


def default_weight():
    # 权重词典的定义如下:
    # 第0位(float):表示权重
    # 第1位(list):内有包含这个keywords的所有标题
    # 第2位(list):内有包含这个keywords的所有游戏名
    return [0, set([]), set([])]


def load_doc_list(this_path):
    with open(this_path, "r", encoding="utf-8") as tl:
        title_list = tl.readlines()
        # title_list 格式是:doc_id,doc_title,doc_game_name
    return title_list


def weight_calc(this_title_list):
    total_key_words = defaultdict(default_weight)

    for lines in this_title_list:
        titles = lines.split("\t")
        temp = jieba.cut(titles[1], cut_all=False)
        for keyword in temp:
            total_key_words[keyword][1].add(titles[0])  # 权重表存入 doc_id
            total_key_words[keyword][2].add(titles[2])  # 权重表存入 game_name

    dict_keywords_weight_docs_games = dict(
            (k, v) for k, v in total_key_words.items()
            # (k, v) for k, v in total_key_words.items() if (
            #     v[0] 
      
      (责任编辑:admin)
织梦二维码生成器
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
推荐内容